如何使用Perl模块中的常量?

时间:2008-10-10 21:06:54

标签: perl module export constants

如果我在Perl模块中定义一个常量,我如何在主程序中使用该常量? (或者如何在主程序中调用该常量?)

6 个答案:

答案 0 :(得分:46)

可以像其他包符号一样导出常量。使用标准Exporter模块,您可以从包中导出常量:

package Foo;
use strict;
use warnings;

use base 'Exporter';

use constant CONST => 42;

our @EXPORT_OK = ('CONST');

1;

然后,在客户端脚本(或其他模块)中

use Foo 'CONST';
print CONST;

您可以使用%EXPORT_TAGS哈希(请参阅Exporter文档)来定义可以使用单个导入参数导出的常量组。

更新:如果您有多个常量,这是一个如何使用%EXPORT_TAGS功能的示例。

use constant LARRY => 42;
use constant CURLY => 43;
use constant MOE   => 44;

our @EXPORT_OK = ('LARRY', 'CURLY', 'MOE');
our %EXPORT_TAGS = ( stooges => [ 'LARRY', 'CURLY', 'MOE' ] );

然后你可以说

use Foo ':stooges';
print "$_\n" for LARRY, CURLY, MOE;

答案 1 :(得分:24)

常量只是具有空原型的子,所以它们可以像任何其他子一样导出。

# file Foo.pm
package Foo;
use constant BAR => 123;
use Exporter qw(import);
our @EXPORT_OK = qw(BAR);


# file main.pl:
use Foo qw(BAR);
print BAR;

答案 2 :(得分:21)

要扩展之前的答案,因为常量实际上只是潜艇,你可以 直接调用它们:

use Foo;
print Foo::BAR;

答案 3 :(得分:17)

您可能需要考虑使用Readonly而不是常量。

答案 4 :(得分:8)

package Foo;
use Readonly;
Readonly my  $C1 => 'const1';
Readonly our $C2 => 'const2';
sub get_c1 { return $C1 }
1;

perl -MFoo -e 'print "$_\n" for Foo->get_c1, $Foo::C2'

答案 5 :(得分:6)

要添加一些技巧,因为常量只是一个子程序,你甚至可以把它称为类方法。

package Foo;
use constant PI => 3.14;

print Foo->PI;

如果你有很多常数,这是一个很好的方法来偶尔得到它们而不必全部导出它们。但是,与Foo::PI或导出PI不同,Perl不会编译出Foo->PI,因此您需要支付方法调用的费用(这可能无关紧要)。