我正在努力让关注一些 Perl Best Practices 变得更容易。通过创建 Constants
导出本书中使用的几个标量的模块。特别是,$EMPTY_STRING
,我几乎可以在我编写的每个 Perl 脚本中使用。我想要的是自动导出这些标量,这样我就可以使用它们而无需在每个脚本中明确定义它们。
#!perl
package Example::Constants;
use Exporter qw( import );
use Readonly;
Readonly my $EMPTY_STRING => q{};
our @EXPORT = qw( $EMPTY_STRING );
一个示例用法:
#!perl
use Example::Constants;
print $EMPTY_STRING . 'foo' . $EMPTY_STRING;
使用上面的代码会产生错误:
Global symbol "$EMPTY_STRING" requires explicit package name
如果我更改
Readonly
声明:Readonly our $EMPTY_STRING => q{}; # 'our' instead of 'my'
错误变为:
Attempt to reassign a readonly scalar
这对 mod_perl 来说是不可能的吗?
最佳答案
你有4个问题:
strict
和 warnings
编译指示 base
包含导出商pragma(因为它为你设置了 @ISA
)our
变量)这是更正后的模块。
package Example::Constants;
use strict;
use warnings;
use base 'Exporter';
use Readonly;
Readonly our $EMPTY_STRING => q{};
our @EXPORT = qw( $EMPTY_STRING );
1;
嗯,我错过了尝试分配给只读的一点,听起来模块不止一次被加载。我相信 mod_perl 有一个 mechanism用于加载与脚本本身分开的模块。此加载仅发生一次,因此您应该使用它。
关于perl - 如何使用 mod_perl 导出只读变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/736260/