perl - 如何在 Perl 中的不同包之间共享全局值?

标签 perl global-variables

是否有一种标准方法来编写模块以保存要包含在每个其他包中的全局应用程序参数?例如:use Config; ?

一个只包含 our 的简单包变量?只读变量呢?

最佳答案

已经有 standard Config module ,所以选择一个不同的名称。

假设你有 MyConfig.pm内容如下:

package MyConfig;

our $Foo = "bar";

our %Baz = (quux => "potrzebie");

1;

然后其他模块可能会使用它
#! /usr/bin/perl

use warnings;
use strict;

use MyConfig;

print "Foo = $MyConfig::Foo\n";

print $MyConfig::Baz{quux}, "\n";

如果您不想完全限定名称,请使用标准 Exporter取而代之的是模块。

MyConfig.pm 中添加三行:
package MyConfig;

require Exporter;
our @ISA = qw/ Exporter /;
our @EXPORT = qw/ $Foo %Baz /;

our $Foo = "bar";

our %Baz = (quux => "potrzebie");

1;

现在不再需要完整的包名:
#! /usr/bin/perl

use warnings;
use strict;

use MyConfig;

print "Foo = $Foo\n";

print $Baz{quux}, "\n";

您可以将只读标量添加到 MyConfig.pm
our $READONLY;
*READONLY = \42;

这记录在 perlmod .

添加到@MyConfig::EXPORT后, 你可以试试
$READONLY = 3;

在不同的模块中,但你会得到

在 ./program 第 12 行尝试修改只读值。

作为替代方案,您可以在 MyConfig.pm 中声明使用 constant 的常量模块,然后导出那些。

关于perl - 如何在 Perl 中的不同包之间共享全局值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109581/

相关文章:

perl - 只有在没有加载要求的情况下,如何运行我的 Perl 脚本?

oop - 类成员变量不和全局变量一样糟糕吗?

c - 从全局结构中读取时是否需要信号量?

javascript - Node.js 全局变量!坏的、丑的和表现

c - 为什么不允许全局变量重定义?

c++ - 正确执行全局配置

perl - 使用 DBIx::Class 中的 ID 列表进行搜索

perl - 在 Perl 中执行多线程时应该查看哪些模块?

multithreading - Perl 脚本随着进度变慢

regex - 计算 qr 正则表达式中的捕获组?