如何用Perl打印导出的模块常量?
我想在一个包中定义一些常量,然后在另一个包中使用它们,但我似乎做得不对!第一枪我就被击中了 在使用“严格subs”时,不允许使用裸字“最喜爱的颜色” 我猜是因为我没有在lib()函数中使用包的基本路径 模块 My/Colors.pm如何用Perl打印导出的模块常量?,perl,constants,Perl,Constants,我想在一个包中定义一些常量,然后在另一个包中使用它们,但我似乎做得不对!第一枪我就被击中了 在使用“严格subs”时,不允许使用裸字“最喜爱的颜色” 我猜是因为我没有在lib()函数中使用包的基本路径 模块 My/Colors.pm package My::Colors; BEGIN { use Exporter; our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = 1.00; @ISA
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;
包含导出常量的模块
彩色驱动程序.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抱怨它找不到新的子对象
无法通过包“颜色”找到对象方法“新建”(可能是您
忘了
在color_driver.plx第15行(#1)处加载“Colors”?)
在模块中:
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;
几乎与
BEGIN {
require Colors;
Colors->import(qw( :const ));
}
您告诉Perl查看
导入的颜色
包/名称空间(和新建
),但是模块填充包/名称空间My::Colors哇哦,这种工作——新建仍然不工作,但是当我调用新的时,其他常量工作了。但是如果我在lib()函数中放置了正确的路径,为什么我必须包含完整的包路径?我只想使用颜色qw(:const)@codenninja,你当时发布的内容中没有新的内容。无论如何,更新了。--oic!!!包也必须与lib()协调!谢谢^ ^ -对不起,我正处于更新和测试期间,当你评论-我试图同步所有的东西,同时更新问题-所以不要生气!如果你能在那投下一票,我想我们都会很开心的!再次感谢你@忍者代码,现在我们可以看到整个画面了,我添加了一些解释。
BEGIN {
require Colors;
Colors->import(qw( :const ));
}