如何在Perl中打印导出的模块常量?

时间:2011-08-29 22:49:39

标签: perl constants

我想在一个包中定义一些常量,然后在另一个包中使用它们,但我似乎没有做到这一点!第一枪我得到了

  

Bareword“FAVORITE_COLOR”不允许使用“严格潜艇”......

我想这是因为我没有在lib()函数中使用我的包的基本路径,

模块 我/ Colors.pm

package My::Colors;

BEGIN {
  use Exporter;
  our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
  $VERSION     = 1.00;
  @ISA         = qw(Exporter);
  @EXPORT      = qw(  );
  @EXPORT_OK   = qw( FAVORITE_COLOR DISLIKED_COLOR );  
  %EXPORT_TAGS = ( 'all' => [ @EXPORT, @EXPORT_OK ], 'const' => [ 'FAVORITE_COLOR', 'DISLIKED_COLOR'] ); 

}
our @EXPORT_OK;

use lib qw( /home/dev );

use Carp;


use constant {     
  DISLIKED_COLOR => "green",
  FAVORITE_COLOR => "red"
};

sub new {
 my($class, %args) = @_;
 my $self = bless({}, $class);
 my $target = exists $args{target} ? $args{target} : "new";
 $self->{target} = $target;
 return $self;
}


1;

包含导出常量的模块 的 color_driver.plx

#!/usr/bin/perl -w
use warnings;
use strict;
use diagnostics;

use lib qw( /home/dev/My );
use Colors;
use Colors qw(:const);


sub main{
  my $color = new Colors;
  print "Color is",FAVORITE_COLOR;

}

main();

知道我做错了什么?

当我删除strict时,常量不转换为其值= /

更新 不幸的是现在perl抱怨它找不到新的子

  

无法通过包“颜色”找到对象方法“new”(也许你   忘了           在color_driver.plx第15行(#1)加载“颜色”?)

1 个答案:

答案 0 :(得分:3)

在模块中:

package My::Colors;

在剧本中:

use lib qw( /home/dev/My );
use Colors qw(:const);

my $color = new Colors;

将模块的这些行更改为

package Colors;

或将脚本的这些行更改为

use lib qw( /home/dev );
use My::Colors qw(:const);

my $color = new My::Colors;

use Colors qw( :const );

几乎与

相同
BEGIN {
    require Colors;
    Colors->import(qw( :const ));
}

您告诉Perl查看Colors {/ 1}} {和import的{​​{1}}包/命名空间,但该模块会填充包/命名空间new