2010-11-17 6 views
5
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); 

Salida:Guión muere si existe un módulo que imposible se utiliza durante la clase() - DateTime :: zona horaria local :: ejemplo

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 

He comprobado y sin duda es el interior de una sub-rutina. Eso no parece ser algo que ver con el módulo utilizado, este código también hace que el mismo error:

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

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

parece que es un error en PERL más que nada. ¿Algunas ideas? Más interesado en por qué sucede esto que en una solución alternativa: solo ocurre si el módulo no existe.

+0

Funciona bien aquí. – cdhowie

+0

Corriendo en Linux, PERL versión 5.8.8 - ¿usted? :( –

+0

Debian Lenny, Perl 5.10.0. – cdhowie

Respuesta

3

Parece que en realidad es un error en Perl. Vea this thread en la lista de Perl Porters.

+0

La solución temporal para este caso particular es hacer: local $^O = "Unix"; antes del bucle de clasificación, por lo que la evaluación nunca falla :) –

Cuestiones relacionadas