Wie kann ich einen "Die" -Aufruf in einer Perl-Bibliothek umgehen, die ich nicht ändern kann?

Ja, das problem ist mit einer Bibliothek, die ich verwende, und Nein, ich kann es nicht ändern können. Brauche ich einen workaround.

Im Grunde bin ich den Umgang mit einem schlecht geschriebenen Perl-Bibliothek, die Ausfahrten mit 'sterben', wenn ein bestimmter Fehler aufgetreten ist beim Lesen einer Datei. Rufe ich diese routine vom Programm die Schleife über Tausende von Dateien, eine Handvoll, die sind schlecht. Schlechte Dateien passiert, ich will einfach nur meine routine, um einen Fehler zu protokollieren und bewegen auf.

WENN ich ändern KÖNNTE, die Bibliothek, ich würde ändern Sie einfach die

die "error";

einer

print "error";return;

aber ich kann nicht. Gibt es eine Möglichkeit, ich kann die couch der routine, so dass die schlechten Dateien, die nicht zum Absturz des gesamten Prozesses?

NACHFOLGE-FRAGE: Mit einer "eval" - couch-der Absturz-anfällig Aufruf funktioniert gut, aber wie richte ich die Handhabung für fangen-können Fehler in diesen Rahmen? Zu beschreiben:

Ich habe ein Unterprogramm, das ruft die Bibliothek-die-Abstürze-manchmal mehrmals. Eher als couch-jeder Anruf innerhalb dieser Unterroutine mit einem eval{}, ich Erlaube einfach, dass Sie zu sterben, und verwenden Sie eine eval{} auf die Ebene, ruft mein Unterprogramm:

my $status=eval{function($param);};
unless($status){print $@; next;}; # print error and go to next file if function() fails

Aber es gibt Fehlerzustände, die ich können und tun, catch-in-Funktion(). Was ist die richtige/eleganter Weg, um design den Fehler-Fang in das Unterprogramm und dem aufrufenden routine, so daß ich das richtige Verhalten für beide erwischt und nicht erfasste Fehler?

Kommentar zu dem Problem
Ein sterben im Falle eines Fehlers ist überhaupt nicht ein Zeichen für eine Bibliothek, die "schlecht geschrieben". Nennen Sie es "werfen einer Ausnahme" und plötzlich ist klingt sehr viel weiter Fortgeschritten. Kommentarautor: innaM
Ich Stimme mit Manni auf diese ein. Sterben in der Reaktion auf Fehler, insbesondere-Datei verbundene Fehler bedeutet, dass es mehr korrekt geschrieben, als eine, die weiter tuckern entlang, blind für diese Fehler. Kommentarautor: Mr. Muskrat
Ich Stimme mit den Kommentatoren über mir Kommentarautor: Leon Timmermans
Obwohl es gut ist, dass die Bibliothek macht Fehler überprüfen, es ist schlimm, dass es entschieden hat, dass Fehler tödlich sein. In den meisten Fällen die Funktion(en) sollte wahrscheinlich nicht eine bloße "Rückkehr" statt. Kommentarautor: Michael Carman

InformationsquelleAutor der Frage Ed Hyer | 2009-01-16

Schreibe einen Kommentar