programa - ¿Error en autodie.pm de Perl?
perl vs python (2)
Estoy esperando:
#!/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'';
perldoc autodie
eso en la perldoc autodie
que dice:
El pragma "autodie" tiene un alcance léxico, lo que significa que las funciones y subrutinas alteradas con "autodie" solo cambiarán su comportamiento hasta el final del bloque, archivo o "eval" adjunto.
Además, { no autodie }
(en un ámbito) es incluso parte de SYNOPSIS
use/no warnings
comporta como espero:
#!/usr/bin/perl
use warnings;
{
no warnings;
}
# This *does* generate a warning
print undef;
¿Me he perdido algo o está de acuerdo con que haya un error en la autodie? No encontré nada en la lista de errores de autodie
This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi
EDITAR: ahora he archivado un informe de error
La sinopsis no muestra en realidad que la directiva tenga un alcance léxico, pero se menciona varias veces en otra parte de la documentación. Esto es claramente un error.
La pregunta es: ¿el error todavía existe?
$ 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. No es solo no autodie;
eso está roto, sin embargo. 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 se pueden archivar utilizando el rastreador de errores de autodie.
Puedo reproducir esto con v5.10.0 (Debian x86_64) y ActiveState 5.14.2.
Prueba esta ubicación para obtener informes de errores.
EDITAR He probado algunos: para eludir el problema hasta que se solucione el error, tendrás que volver a use
Autodie:
use strict;
use autodie;
do {
no autodie;
# ...
} while(0);
use autodie;
open FILE, ''<'', ''/non-existing''; # dies again.