Perl'in autodie.pm'deki hata mı?

Bekliyorum:

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

Bunu perldoc autodie 'ye göre şöyle yazarım:

"autodie" pragma'nın sözcük kapsamı vardır,   "autodie" ile değiştirilen alt yordamlar yalnızca davranışlarını değiştirecek   kapsayıcı bloğun, dosya veya "değerlendirmenin" sonuna kadar

Also, { no autodie } (in a scope) is even part of the SYNOPSIS

use/no warnings behaves as I expect:

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

Have I missed something or do you agree there a bug in autodie? I didn't find anything in the autodie buglist

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

EDIT: I've now filed a bug report

29
Perl v5.14.2'de teyit edildi (x86_64).
katma yazar Alan Haggai Alavi, kaynak

2 cevap

Bunu v5.10.0 (Debian x86_64) ve ActiveState 5.14.2 ile yeniden üretebilirim.

Hata raporları için bu konumu deneyin.

EDIT I tested some: to circumvent the problem until the bug is fixed, you'll need to use autodie again:

use strict;
use autodie;

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

use autodie;

open FILE, '<', '/non-existing'; # dies again.
9
katma
Teşekkürler, evet, basit bir reprodüksiyon senaryosu arayışımda, autodie'yi kullandığını da keşfettim; yine bir çözümdü. Ancak yazıya koymayı unuttum.
katma yazar Peter V. Mørch, kaynak

Söz Dizimi, aslında, sözcüksel bir kapsamı olan yönergeyi göstermez, ancak belgelerin başka yerlerinde birden çok kez bahsedilir. Bu açıkça bir böcek.

Soru şu olur: Hata hala var mı?

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

Evet öyle. Yine de sadece no autodie; bozuk. Tuhaf olarak, autodie'nin bu sürümü şu anda CPAN'da mevcut olandan daha yeni mi ?! Böylece düşürdüm ve tekrar denedim.

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

Hatalar, autodie'nin hata izleyici kullanılarak dosyalanabilir.

4
katma