perlのautodie.pmのバグ?

私は期待しています:

#!/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 に書いています。

"autodie"プラグマはレキシカルスコープを持っています。つまり、関数と   "autodie"で変更されたサブルーチンは、その動作を変更するだけです   囲みブロック、ファイル、または "eval"の終わりまで

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(x86_64)で確認済みです。
追加された 著者 Alan Haggai Alavi,

2 答え

私はこれをv5.10.0(Debian x86_64)とActiveState 5.14.2で再現できます。

バグレポートについてはこちらをお試しください。

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
追加された
ありがたいことに、シンプルな再現スクリプトを求めて、私は autodieを使用するが回避策であることも発見しました。しかし、投稿にそれを入れて忘れてしまった。
追加された 著者 Peter V. Mørch,

このシノプシスでは、実際にはレキシカルスコープのディレクティブは表示されませんが、ドキュメンテーションの別の場所で何回も言及されています。これは明らかにバグです。

問題は次のようになります。バグはまだ存在していますか?

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

はい、そうです。しかし、それは壊れているのは no autodie; だけです。奇妙なことに、そのバージョンのautodieは、現在CPANで利用できるものより新しいですか?だから私は格下げしてもう一度やり直した。

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

バグは、autodieのバグトラッカーを使って提出することができます。

4
追加された