无法识别对本地perl模块的修改

时间:2010-12-08 20:40:28

标签: perl perl-module subroutine

我在自己的文件中有一个perl子例程。它由两个不同的perl脚本分别调用。我修改了传入的参数列表,并在两个调用脚本中进行了必要的更改,但只有一个脚本执行了我所期望的操作。当我在另一个上使用perl调试器时,当调试器进入模块中的子例程时,它会向我显示模块在编辑之前的样子。因此,当我运行该脚本时,它正在传递新的参数列表,但模块正在尝试以旧的方式分配它们,这显然是错误的。

是什么导致这个?为什么一个脚本正常工作而另一个脚本不能正常工作?

具体而言,是的,我正在使用严格和警告。 老:

use strict;
use warnings;
use lib("/absolute/path/to/module"); #mymodule.pm lives here
use packagename;

my $string = "foo";
my %Hash = my_sub($foo);

并在模块中:

package packagename;

use strict;
use warnings;
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK);

@ISA = qw( Exporter );
@EXPORT = qw(my_sub);
@EXPORT_OK = qw(my_sub);

sub my_sub {
   my $string = $_[0];
   my %Hash;
   ...
   return %Hash;
}

我已经为参数添加了一个数组引用。调用脚本的新功能是:

my @array = qw(Zero One Two);
my %Hash = my_sub(\@array, $string);

模块新手:

sub my_sub {
   my (@array) = @{$_[0]};
   my $string = $_[1];
}

当我使用调试器运行我的脚本并进入此模块时,它显示我的$ string从$ _ [0]分配为子例程的第一行,就好像我从未更改过模块一样。

同样,这只发生在我的一个脚本中,但另一个工作正常。一切都在同一个目录中。我在linux上运行它,perl 5.10。我很困惑!

1 个答案:

答案 0 :(得分:2)

我猜这些脚本正在加载模块的不同副本,而您只修改了一个副本。尝试添加

print $INC{'packagename.pm'}."\n";

在每个脚本中的use packagename行之后。 (不要忘记将::替换为/中的packagename,如果有的话。)这将告诉您脚本是否真的加载了相同的模块。