gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:11:38 27 4
gpt4 key购买 nike

我正在努力让关注一些 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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com