Модификации локального модуля Perl не распознаются - PullRequest
1 голос
/ 08 декабря 2010

У меня есть одна подпрограмма 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.Я сбит с толку!

1 Ответ

2 голосов
/ 08 декабря 2010

Я думаю, что скрипты загружают разные копии модуля, а вы изменили только одну копию.Попробуйте добавить

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

после строки use packagename в каждом скрипте.(Не забудьте заменить :: на / в packagename, если есть.) Это скажет вам, действительно ли скрипты загружают один и тот же модуль.

...