У меня есть одна подпрограмма 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];
}
Когда я запускаю свой скрипт с отладчиком и захожу в этот модуль, он показывает, что моя строка $назначенный из $ _ [0] в качестве первой строки подпрограммы, как будто я никогда не менял модуль.
Опять же, это происходит только с одним из моих скриптов, но другой работает нормально.Все находится в одном каталоге.Я запускаю это на Linux, Perl 5.10.Я сбит с толку!