假设我有三个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