2010-08-29 10 views
5

Ich schreibe ein Perl-Skript, und in dem Teil, wo ich die Optionen, die der Benutzer in der Befehlszeile angegeben, überprüft habe, möchte ich mit einem Fehler beenden erklären was mit den Optionen falsch war. In diesem Fall ist es nicht erforderlich, dass eine Stack-Ablaufverfolgung mit dieser Fehlermeldung einhergeht. Also, was ist der beste Weg, um mit einer Fehlermeldung zu sterben, aber keine Stack-Trace oder Debug-Informationen?Was ist der richtige Weg, um mit einem Fehler zu sterben, aber ohne einen Stack-Trace in Perl?

Ich habe versucht, die folgenden:

die "Invalid options"; 

die dann

Invalid options at myscript.pl line 49. 

produziert, habe ich versucht,

use Carp; 
... 
croak "Invalid options"; 

die

Invalid options at myscript.pl line 47 
    main::prepare_output_directory() called at myscript.pl line 546 
012 erzeugt

Also wie kann ich nur mit Invalid options und nichts anderes sterben?

Bonusfrage: Warum sagt croak mir, dass der Fehler in Zeile 47 ist, wenn der eigentliche Anruf an croak ist in Zeile 49?

+1

re: Bonus Frage, mehr Kontext für Ihr Quaken zeigen? – ysth

+0

Vergiss die Bonusfrage. Ich habe mich nur gefragt, ob es einen allgemeinen Grund geben könnte. –

+0

Für Ihre Bonusfrage: 'krächzen' versucht die Zeilennummer aus der Sicht des Anrufers zu melden. Lesen Sie die Dokumentation für das Modul [Karpfen] (http://perldoc.perl.org/Carp.html). –

Antwort

18

Einfach eine neue Zeile am Ende des die string:

die "Invalid options\n"; 

, die von der Position des Fehlers wird verhindert, dass auf Ihre Nachricht angehängt wird.

+20

Ich denke, sie haben die Dokumentation gelesen. [perldoc -f die] (http://perldoc.perl.org/functions/die.html) –

+1

Ich wünschte irgendwie, es gäbe einen Weg, das gleiche mit 'krächzen' zu machen. Mein Verständnis ist, dass semantisch 'sterben' für interne Fehler ist, während' croak' für Fehler ist, die durch etwas Äußeres verursacht werden. In diesem Fall möchte ich angeben, dass der Benutzer ungültige Optionen eingegeben hat, was eindeutig der Fall ist. Doch ich muss sterben, statt zu quaken, um das Backtrace zu unterdrücken. –