29 votes

Un bug dans perodie's autodie.pm?

J'en attends:

#!/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';

Je me base que sur perldoc autodie qui dit:

Le "autodie" pragma est portée lexicale, ce qui signifie que les fonctions et les les sous-routines modifiées avec des "autodie" ne changeront leur comportement jusqu'à la fin du bloc enfermant, fichier, ou "eval"

Aussi, { no autodie } (dans un champ) est même une partie de l' SYNOPSIS

use/no warnings se comporte comme je m'attends à:

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

Ai-je raté quelque chose ou vous êtes d'accord il y a un bug dans autodie? Je n'ai rien trouvé dans la liste de bogues, il autodie

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

EDIT: j'ai déposé un rapport de bug

9voto

Linus Kleen Points 15925

Je peux reproduire cela avec v5.10.0 (Debian x86_64) et ActiveState 5.14.2.

Essayez cet emplacement pour les rapports de bogues.

EDIT J'en ai testé quelques-uns: pour contourner le problème jusqu'à ce que le bug soit corrigé, vous devrez de nouveau use autodie:

 use strict;
use autodie;

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

use autodie;

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

4voto

ikegami Points 133140

Le Synopsis n'a pas fait de montrer la directive ayant une portée lexicale, mais il est mentionné plusieurs fois ailleurs dans la documentation. C'est clairement un bug.

La question devient: est-ce que le bug existe toujours?

$ 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");'

Oui, c'est fait. C'est seulement no autodie; qui est cassé, si. Curieusement, cette version de autodie est plus récent que ce qui est actuellement disponible sur le CPAN?! Donc, j'ai rétrogradé et a essayé de nouveau.

$ 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");'

Les insectes peuvent être déposées à l'aide autodie du bug tracker.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X