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

如何用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

我想在一个包中定义一些常量,然后在另一个包中使用它们,但我似乎做得不对!第一枪我就被击中了

在使用“严格subs”时,不允许使用裸字“最喜爱的颜色”

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

模块 My/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;
包含导出常量的模块 彩色驱动程序.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 ));
}