我正在用几个模块在Perl中编写一个应用程序。我想编写一些全局常量,这些常量在任何地方都可以看到,如下所示:
#Constants.pm
$h0 = 0;
$scale = 20;
然后在几个模块中使用它们而无需使用
main::
或Constants::
。但是,如果我在多个模块中编写use Constants;
,它们只会被导入一个 namespace 中。有没有办法解决?我正在使用最新的ActivePerl。
最佳答案
您可以将其放在Constants.pm
的顶部:
package main;
在这种情况下,您定义的所有变量都将在
main
命名空间中:$main::x
或者,如果您觉得自己很勇敢:
package;
在这种情况下,您定义的所有变量都将在一个空的命名空间中:
$::x
请注意,不建议在不使用命名空间的情况下使用
package
,并且在某些版本的Perl中,显然不建议使用man perlfunc
。请参阅下面的报价。引用ojit_code:
包NAMESPACE
package声明编译单元在给定的位置
命名空间。包声明的范围是
从声明本身到结束
包含块,文件或评估(与“我的”相同
运算符(operator))。所有其他不合格的动态标识符
将在此命名空间中。打包声明会影响
仅动态变量-包括您使用过的变量
“局部”在上-但不是词法变量,哪个是cre?
吃了“我的”。通常它将是第一个decla?
配给文件中的配给量,由“要求”或
“使用”运算符。您可以切换到更多包装
多于一个地方它仅影响哪个符号表
由编译器用于该块的其余部分。
您可以在其他地方引用变量和文件句柄
通过给标识符加上包前缀来打包
名称和双冒号:$ Package::Variable。如果
软件包名称为null,假定为“主”软件包。
也就是说,$::sail等效于$ main::sail(以及
至于$ main'sail,仍然可以在旧代码中看到)。
如果省略了NAMESPACE,那么当前没有包吗?
年龄,并且所有标识符必须完全合格或
词汇。但是,强烈建议您不要
利用此功能。它的使用可能导致意外
行为,甚至使某些版本的Perl崩溃。这是
已弃用,并将从以后的版本中删除。
编辑:这个问题可能也有帮助:How do I use constants from a Perl module?