假設我有三個perl模塊如下給出:依賴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中的值?
現在,如果我將需要測試替換語句使用測試Initalize.pm;並在此require語句之前移動語句Check-> setX(10),然後$ data被正確初始化爲新值10. 這種情況在這種情況下發生了什麼不同?
我建議你不要打電話給Test.pm。 Test.pm是Perl附帶的核心模塊。看起來它現在沒有出貨,而且我不知道它何時停止發貨,但是我會警惕與較老的Perls中的Test.pm衝突。 – 2013-02-25 22:01:37
這不是真正的面向對象編程,因爲你沒有任何對象:唯一的方法是類方法。你應該真的只有簡單的子程序,而不是把OO代碼當作OO代碼。此外,它看起來像'Initialize.pm'是一個*程序*(如果它是一個模塊,你不應該運行它),所以它應該被稱爲'main.pl'或類似的東西。 – Borodin 2013-02-25 23:40:46