perl - 如何使用 mod_perl 导出只读变量?

标签 perl readonly mod-perl exporter

我正在努力让关注一些 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个问题:

  • 您不包括 strictwarnings编译指示
  • 最好通过 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/

    相关文章:

    perl - 向@INC 添加路径但不在 Perl 脚本中

    perl - 使用语句中的 Perl 哈希语法说明

    Perl 哈希值

    .net - .NET 中的只读数组

    sql - 更新数据库失败,因为数据库是只读的

    c# - 将方法参数设置为只读

    perl - 如何使用带有 mod_perl 的调试器

    apache - mod_perl 错误返回 202 Apache2::Const::HTTP_ACCEPTED

    linux - Perl 中的 Rsync system() 执行随机失败并出现协议(protocol)错误

    perl - 仅选择第一个元素 - 条件使用 XML::Twig