我在自己的文件中有一个 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。我很困惑!