2010-01-07 54 views
27

我有一個腳本通過die引發異常。當我發現異常時,我想輸出沒有附加位置信息的消息。如何輸出不帶位置信息的die()消息?

這個腳本:

#! /usr/bin/perl -w 

use strict; 

eval { 
    die "My error message"; 
}; 
if([email protected]) { 
    print [email protected]; 
} 

輸出 My error message at d:\src\test.pl line 7.

我寧願只是爲了讓輸出: My error message

希望人們不注重爲什麼我想這樣做,但如果有人有興趣然後:

我的腳本w orks,它會查找輸入並將每個輸入分派給一個處理程序,如果它遇到了一個它無法處理的輸入,那麼它會拋出,因此所有異常都來自同一段代碼。因此,在這種情況下,位置並不是非常有用。

回答

43

添加\n到您的字符串:

die "My error message\n" 

這是記錄在die

如果LIST的最後一個元素沒有 結束換行符,當前腳本 行號和輸入行號(如果 任何)也被打印,並提供換行 。

+1

謝謝工具。那就是我一直在尋找的東西! – chollida 2010-01-07 17:17:46

+4

每天學習新的東西@ SO。 – Erik 2010-01-07 19:22:01

+3

哇,這很晦澀!謝謝 – Bizmarck 2015-08-27 19:45:24

2

查看所有額外信息的die的perlfunc條目。並用\n結束您的訊息。

16

我在Mastering Perl的「錯誤處理」一章中討論了這一點。雖然你可以只用一個新的生產線,也可以die與基準結束你的消息消除了文件和行號:

eval { 
    time % 2 ? 
     die { 
      message => q(I died!), 
      level => 'really really serious', 
      } 
     : 
     die "I died as a string!\n"; 
    }; 

if(ref [email protected]) { 
    print "Reference message was [email protected]>{message}\n"; 
    } 
else { 
    print "[email protected]\n"; 
    } 

我往往不喜歡在錯誤信息的末尾換行,雖然我的天堂沒有看到你的代碼,這聽起來像是我想向異常中添加額外信息的情況,所以我可以跟蹤發生了什麼。

您也可以考慮使用CPAN上的許多異常模塊之一。

+4

感謝您的答案布賴恩。我沒有意識到能夠參考而死去。我可以看到這非常有用。 – chollida 2010-01-07 18:24:46