我想在一个包中定义一些常量,然后在另一个包中使用它们,但我似乎没有做到这一点!第一枪我得到了
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)加载“颜色”?)
答案 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
。