lin*_*ild 9 import perl module global-variables
我需要进口所有我们从变量无名的Perl模块(Module.pm)和使用它们的Perl脚本(Script.pl)内.
以下代码在没有"use strict"的情况下运行良好,但是失败了.如何更改此代码以使用"use strict"而无需手动列出所有导入的变量(如其他问题的答案中所述)?
非常感谢你的帮助!
Script.pl:
use strict;
require Module;
print $Var1;
Run Code Online (Sandbox Code Playgroud)
Module.pm:
our $Var1 = "1\n";
...
our $VarN = "N\n";
return 1;
Run Code Online (Sandbox Code Playgroud)
运行脚本:
$> perl Script.pl
Run Code Online (Sandbox Code Playgroud)
错误:
Global symbol "$Var1" requires explicit package name at Script.pl line 3.
Execution of Script.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
注意(1):模块未命名,因此Module::不能使用前缀.
注(2):Module.pm还包含一组由全局变量配置的函数.
注(3):变量不同,不应存储在一个数组中.
注(4):设计不好,但问题不在于设计.这是强制列出的代码使用复杂性进行最小的修改O(1),即几行代码不依赖于N.
解决方案候选者(ACCEPTED):$::在所有导入的变量之前添加.它符合strict并允许代码中的my变量不同imported.
将您的脚本更改为:
use strict;
require Module;
print $Module::Var1;
Run Code Online (Sandbox Code Playgroud)
问题是$Var1它不在主命名空间中,而是在Module命名空间中.
编辑:正如下面的评论所指出的那样,你还没有命名你的模块(即它没有package Module;在顶部说明).因此,没有Module命名空间.将脚本更改为:
use strict;
require Module;
print $main::Var1;
Run Code Online (Sandbox Code Playgroud)
...允许脚本正确打印出来1\n.
| 归档时间: |
|
| 查看次数: |
6956 次 |
| 最近记录: |