Подтвердить что ты не робот

Ошибка в 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"

Кроме того, { no autodie } (в области видимости) является частью SYNOPSIS

use/no warnings ведет себя так, как я ожидаю:

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

Я что-то пропустил или вы согласны с ошибкой в ​​autodie? Я не нашел ничего в автоопределении buglist

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

РЕДАКТИРОВАТЬ: Я теперь подал отчет об ошибке

4b9b3361

Ответ 1

Я могу воспроизвести это с помощью v5.10.0 (Debian x86_64) и ActiveState 5.14.2.

Попробуйте это местоположение для отчетов об ошибках.

РЕДАКТИРОВАТЬ. Я протестировал несколько: чтобы обойти проблему до тех пор, пока ошибка не будет исправлена, вам нужно снова use автодиа:

use strict;
use autodie;

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

use autodie;

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

Ответ 2

Синопсис фактически не показывает директиву, имеющую лексическую область действия, но она упоминается несколько раз в другом месте документации. Это явно ошибка.

Возникает вопрос: сохраняется ли ошибка?

$ 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 отслеживания ошибок.