5 Stimmen

Skript stirbt, wenn ein nicht vorhandenes Modul während sort() verwendet wird - DateTime::TimeZone::Local Beispiel

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);

Sortie :

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

Ich habe es überprüft und es befindet sich definitiv innerhalb einer Unterroutine. Es scheint nichts mit dem verwendeten Modul zu tun zu haben, dieser Code verursacht auch den gleichen Fehler:

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

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

Es scheint sich eher um einen Fehler in PERL zu handeln als um etwas anderes. Irgendwelche Ideen? Mehr daran interessiert, warum dies geschieht, als eine Abhilfe - es tritt nur auf, wenn das Modul nicht vorhanden ist.

3voto

Simon Whitaker Punkte 20381

Es sieht so aus, als ob es tatsächlich ein Fehler in Perl ist. Siehe dieses Thema auf der Liste der Perl-Porter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X