У меня есть одна подпрограмма perl в собственном файле. Он называется отдельно двумя разными 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. Я сбит с толку!
Bingo! Я совершенно забыл, что я скопировал модуль в другом месте для тестирования развертывания, и один из моих сценариев использовал его. Я относительно новичок в perl и не знаю о INC; спасибо за большой совет. – jasper77