2010-08-29 21 views
5

我正在編寫一個perl腳本,並且在我正在檢查用戶在命令行中提供的選項的部分中,我希望退出並解釋錯誤解釋選項的錯誤。在這種情況下,不需要堆棧跟蹤來處理此錯誤消息。那麼什麼是最好的方式與一個錯誤信息,但沒有堆棧跟蹤或調試信息死亡?在perl中沒有堆棧跟蹤而死的錯誤是什麼?

我已經試過如下:

die "Invalid options"; 

產生

Invalid options at myscript.pl line 49. 

然後,我試過

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

產生

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

那麼我怎麼能死於Invalid options而沒有別的?

獎勵問題:爲什麼croak告訴我,錯誤在第47行,當實際呼叫croak在第49行?

+1

回覆:獎金問題,爲您的呱呱聲顯示更多的上下文? – ysth 2010-08-29 06:06:21

+0

沒關係獎金問題。我只是想知道是否可能有一些普遍的原因。 – 2010-08-29 08:14:20

+0

對於你的獎勵問題:'croak'試圖從調用者的角度報告行號。閱讀[Carp](http://perldoc.perl.org/Carp.html)模塊的文檔。 – 2010-08-29 14:35:11

回答

18

只要把一個換行符在die字符串的結尾:

die "Invalid options\n"; 

這將阻止錯誤的位置被添加到您的消息。

+20

我猜他們閱讀文檔。 [perldoc -f die](http://perldoc.perl.org/functions/die.html) – 2010-08-29 07:26:36

+1

我希望有一種方法可以用'croak'做同樣的事情。我的理解是,在語義上,'die'是爲了內部錯誤,而'croak'是由外部引起的錯誤。在這種情況下,我想指出用戶輸入了無效的選項,這顯然是後者的一種情況。然而我必須死而不是呱呱叫鎮壓回溯。 – 2010-09-01 07:55:33