Скрипт умирает, если во время сортировки используется модуль, который не существует - DateTime :: TimeZone :: Local - PullRequest
5 голосов
/ 17 ноября 2010
use DateTime::TimeZone::Local;
use Test::More tests => 1;

my @input = (1 .. 10 );
my (@output) = sort {
    DateTime::TimeZone::Local->TimeZone();
    $a cmp $b
} @input;

is_deeply(\@output, \@input);

Вывод:

1..1
Can't return outside a subroutine at /usr/local/share/perl/5.8.8/DateTime/TimeZone/Local.pm line 72.
# Looks like your test exited with 9 before it could output anything.

shell returned 9

Я проверил, и он определенно находится внутри подпрограммы.Похоже, это не связано с используемым модулем, этот код также вызывает ту же ошибку:

my @output = sort {
    sub1();
} (1 .. 5);

sub sub1 {
    eval "use ModuleDoesntExist";
    return 1; # remove this and get a seg fault
}

Похоже, что это ошибка в PERL больше, чем что-либо другое.Есть идеи?Больше интересует, почему это происходит, чем обходной путь - это происходит, только если модуль не существует.

1 Ответ

3 голосов
/ 17 ноября 2010

Похоже, что это на самом деле ошибка в Perl.См. эту тему в списке Perl Porters.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...