2009-09-16 3 views
11

Ich schreibe Code, der alle Arten von externen Befehlen sowie verschiedene Dateisystembefehle ausführt, die fehlschlagen können.Gibt es ein Perl-Modul, das mich daran hindern kann, etwas hinzuzufügen oder zu sterben, was scheitern kann?

Gibt es ein Modul, das mir die Mühe ersparen kann, or die zu allem hinzuzufügen, das scheitern kann?

Ich möchte in der Lage sein, die folgend in etwas zu wickeln, so dass statt:

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

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

ich:

some_wrapper_code { 
    mkdir $dirname; 

    system("some external command"); 
} 

so dass, wenn mkdir es mir versagt wird sagen, dass der Fehler war in mkdir, und wenn system fehlschlägt, wird mir sagen, dass der Fehler in system war.

Antwort

32

Ja. Check out autodie von CPAN.

Aus der Dokumentation:

Die autodie Pragma bietet eine bequeme Möglichkeit Funktionen zu ersetzen, die normalerweise
falsch bei einem Fehler mit Mitteln zurück, die eine Ausnahme bei einem Fehler werfen.

Die autodie Pragma hat lexikalischen Gültigkeitsbereich, dass autodie mit veränderten Funktionen und Subroutinen Bedeutung werden ihr Verhalten nur bis zum Ende der umschließenden Block, Datei ändern, oder eval.

+11

Und beginnend mit Perl 5.10.1 ist Autodie im Kern enthalten. http://perldoc.perl.org/perl5101delta.html#New-Modules-and-Pragmata – oylenshpeegul