2011-10-28 5 views
29

Estoy esperando:Error en autodie.pm de Perl?

#!/usr/bin/perl 
use autodie; 
# autodie in effect here 
{ 
    no autodie; 
    # autodie is not in effect here 
} 
# autodie should be in effect here because of the supposedly lexical scope 
# of autodie, but this doesn't die: 
open my $i, '<', '/nonexistent'; 

Mi base es que perldoc autodie que dice:

El "autodie" Pragma tiene ámbito léxico, lo que significa que las funciones y subrutinas alterados con "autodie" sólo cambiar su comportamiento hasta el final del bloque de encerramiento, archivo o "eval"

también, { no autodie } (en un ámbito de aplicación) es incluso parte de los SYNOPSIS

use/no warnings se comporta como espero:

#!/usr/bin/perl 
use warnings; 
{ 
    no warnings; 
} 
# This *does* generate a warning 
print undef; 

¿Me he perdido algo o ¿estás de acuerdo que hay un error en autodie? No he encontrado nada en el autodie buglist

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi 

EDIT: ahora me he presentado a bug report

+2

Confirmado en Perl v5.14.2 (x86_64). –

Respuesta

9

puedo reproducir este con v5.10.0 (Debian x86_64) y ActiveState 5.14.2.

Pruebe this location para informes de errores.

EDITAR He probado algunos: para eludir el problema hasta que se corrija el error, tendrá que use autodie nuevo:

use strict; 
use autodie; 

do { 
    no autodie; 
    # ... 
} while(0); 

use autodie; 

open FILE, '<', '/non-existing'; # dies again. 
+0

Gracias, sí, en mi búsqueda de un script de reproducción simple, también descubrí que 'use autodie;' nuevamente era una solución alternativa. Sin embargo, me olvidé de ponerlo en la publicación. –

4

la sinopsis en realidad no mostrar la Directiva que tenga un ámbito léxico , pero se menciona varias veces en otra parte de la documentación. Esto es claramente un error.

La pregunta es: ¿Todavía existe la falla?

$ perl -E'use autodie; say $autodie::VERSION' 
2.1001 

$ perl -we'use autodie; { no autodie; } open(my $fh, "<", "nonexistant");' 

$ perl -we'use autodie; open(my $fh, "<", "nonexistant");' 
Can't open 'nonexistant' for reading: 'No such file or directory' at -e line 1 

$ perl -we'{ use autodie; } open(my $fh, "<", "nonexistant");' 

Sí, lo hace. Sin embargo, solo está roto no autodie;. Curiosamente, esa versión de autodie es más nueva de lo que actualmente está disponible en CPAN ?! Así que me degradaron y lo intenté de nuevo.

$ perl -E'use autodie; say $autodie::VERSION' 
2.10 

$ perl -we'use autodie; { no autodie; } open(my $fh, "<", "nonexistant");' 

$ perl -we'use autodie; open(my $fh, "<", "nonexistant");' 
Can't open 'nonexistant' for reading: 'No such file or directory' at -e line 1 

$ perl -we'{ use autodie; } open(my $fh, "<", "nonexistant");' 

Los errores pueden ser presentadas utilizando autodie de bug tracker.