您可以使用Perl的eval
語句來捕獲異常,包括那些從試圖調用上一個未定義的參數的方法:
eval {
say $shop->ShopperDueDate->day_name();
};
由於eval
返回的最後一條語句進行評估,或undef
失敗,你可以記錄天名稱,像這樣的變量:
my $day_name = eval { $shop->ShopperDueDate->day_name(); };
如果你真的要檢查外,你可以看看在特殊變量[email protected]
。這通常是Perl內置異常的簡單字符串,但如果異常來自autodie或其他使用對象異常的代碼,則可能是完整的異常對象。
eval {
say $shop->ShopperDueDate->day_name();
};
if ([email protected]) {
say "The error was: [email protected]";
}
它也可以串起來使用eval
塊命令的序列。以下僅檢查是否是週末,前提是我們在查找$day_name
時沒有發生任何異常情況。
eval {
my $day_name = $shop->ShopperDueDate->day_name();
if ($day_name ~~ [ 'Saturday', 'Sunday' ]) {
say "I like weekends";
}
};
你能想到的eval
爲同try
從其他語言;的確,如果你使用CPAN的Error模塊,那麼你甚至可以拼寫它try
。還值得注意的是,eval的塊形式(我已經在上面演示過了)不會帶來性能損失,並且會與代碼的其餘部分一起編譯。 eval
(我沒有顯示)的字符串形式完全是一個不同的野獸,應該謹慎使用,如果有的話。
eval
在技術上被認爲是Perl中的一個語句,因此是少數幾個可以在塊結尾處看到分號的地方之一。如果你不經常使用eval
,很容易忘記這些。
保羅
來源
2009-01-08 01:32:06
pjf
你也發佈到Perlmonks(http://www.perlmonks.org/index.pl?node_id=734774)。當您將相同的問題發佈到多個地方時,請讓人們知道,以便人們可以看到所有的答案,而不會浪費時間回答問題。 – 2009-01-08 07:19:32