假设我有三个 perl 模块,如下所示:
测试.pm
package Test;
use strict;
use warnings;
use Check;
our $data = Check->getX;
1;
初始化.pm
package Initialize;
use Check;
use Test;
Check->setX(10);
our $t = $Test::data;
print $t;
1;
检查.pm
package Check;
my $x = 12;
sub setX {
my ($self,$value) = @_;
$x = $value;
}
sub getX
{
return $x;
}
1;
现在,当我运行 Initialize.pm 时,我将 Check.pm 中的 $x 初始化为 10,并将 $x 分配给 Test.pm 中的 $data。但是分配给 $data 的实际值是 12,这是 Check.pm 中给出的初始值。
那么,perl 中的全局变量是什么时候初始化的呢?如何强制我在 Initialize.pm 到 x 中设置的新值是加载到 $data 中的值?
现在,如果我将 Initalize.pm 中的语句 use Test 替换为 require Test;并将语句 Check->setX(10) 移到此 require 语句之前,然后 $data 被正确初始化为新值 10。在这种情况下发生了什么不同?