以下に示すように、3つのperlモジュールがあるとします。
Test.pm
package Test;
use strict;
use warnings;
use Check;
our $data = Check->getX;
1;
Initialize.pm
package Initialize;
use Check;
use Test;
Check->setX(10);
our $t = $Test::data;
print $t;
1;
Check.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にロードされるものであることを強制するにはどうすればよいですか?
ここで、ステートメントuseInitalize.pmのTestをrequireTestに置き換える場合。そして、このrequireステートメントの前にステートメントCheck-> setX(10)を移動すると、$ dataが新しい値10に正しく初期化されます。この場合、何が異なって起こっているのでしょうか。