Есть ли какой-нибудь модуль Perl, который может помешать мне добавить «или умереть» ко всему, что может дать сбой?

Я пишу код, который запускает всевозможные внешние команды, а также различные команды файловой системы, которые могут дать сбой.

Есть ли какой-нибудь модуль, который избавит меня от необходимости добавлять or die ко всему, что может дать сбой?

Я хотел бы иметь возможность обернуть следующее во что-то, чтобы вместо:

mkdir $dirname or die "can't create directory $dirname";

system("some external command") or die "can run some external command";

Я получил:

some_wrapper_code {
    mkdir $dirname;

    system("some external command");
}

таким образом, если mkdir выйдет из строя, он скажет мне, что сбой произошел в mkdir, а если system выйдет из строя, он скажет мне, что сбой был в system.


person Nathan Fellman    schedule 16.09.2009    source источник


Ответы (1)


Ага. Проверьте autodie из CPAN.

Из документов:

Прагма autodie обеспечивает удобный способ замены функций, которые обычно возвращают
false при сбое, эквивалентными функциями, которые при сбое выдают исключение.

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

person friedo    schedule 16.09.2009
comment
А начиная с Perl 5.10.1, autodie включен в ядро. perldoc.perl.org/perl5101delta.html#New-Modules-and- Прагматы - person oylenshpeegul; 16.09.2009