out.pl:

(my|our|local|global|whatever???) var = "test";
require("inside.pm");

inside.pm:
print $var;

我不想使用软件包-这压倒了我的需求:)
谢谢!

最佳答案

它将与our一起使用。

$ cat out.pl
our $var = "test";
require("inside.pm");

$ cat inside.pm
print "Testing...\n";
print "$var\n";

$ perl out.pl
Testing...
test

之所以起作用,是因为our使$var成为全局变量,并且在定义了inside.pm的范围内执行$var。不确定是否建议使用该技术,但这仍然是一个有趣的问题!

编辑:需要基于注释来澄清(好的补丁)答案:

the documentation on the Perl function our :

our将简单名称与当前包中的包(读取:全局)变量相关联,以在当前词法范围内使用。换句话说,our具有与mystate相同的作用域规则,但不一定创建变量。

因此,使用our,我们将使用当前包(此处可能是$var)获得main,并可以在其范围内使用它。实际上,它对您需要的文件中的代码是“全局”的。

在没有our的情况下引入了真正的全局变量,因为变量默认为全局变量。但是我不知道有人会推荐他们。

08-28 07:52