【发布时间】:2011-09-12 17:00:34
【问题描述】:
我需要从 未命名 Perl 模块 (Module.pm) 导入所有 我们的 变量,并在 Perl 脚本 (Script.pl) 中使用它们。
以下代码在没有 "use strict" 的情况下运行良好,但使用它失败了。如何更改此代码以使用 "use strict" 而无需手动列出所有导入的变量(如other question 的答案中所述)?
非常感谢您的帮助!
脚本.pl:
use strict;
require Module;
print $Var1;
模块.pm:
our $Var1 = "1\n";
...
our $VarN = "N\n";
return 1;
运行脚本:
$> perl Script.pl
错误:
Global symbol "$Var1" requires explicit package name at Script.pl line 3.
Execution of Script.pl aborted due to compilation errors.
注意 (1):模块未命名,因此不能使用 Module:: 前缀。
注意 (2):Module.pm 还包含一组由全局变量配置的函数。
注意(3):变量不同,不应存储在一个数组中。
注意(4):设计不好,但问题不在于设计。它是关于强制列出的代码以复杂性O(1) 的最小修改工作,即不依赖N 的几行代码。
候选解决方案(已接受):在所有导入的变量之前添加 $::。它与strict 兼容,还允许在代码中将my 变量与imported 区别开来。
【问题讨论】:
-
如果你需要颠覆
use strict那么你最好不要使用strict。 -
@evil otto - 我需要 strict 来发现程序中的其他问题。
-
如果您要导出 1000 个变量,那么您做错了。
-
@ikegami - 这个数字确实是 50 左右。
-
50 也是如此。事实上,导出 any 变量通常不是最理想的。
标签: perl import module global-variables