標籤:
第十三章:錯誤處理 壹陸玖.
要拋出異常,不要返回特殊值或設定標記。 壹柒零.
讓失敗的內建函數也拋出異常。 壹柒壹.
讓所有上下文中的失敗都是致命失敗。
#把不可接受的失敗行為改為拋出異常 ……
useFatal qw( :void locate_and_open);
#稍後 ……
formy $filename () {
my$fh = locate_and_open($filename);
my$head = load_header_from($fh);
print$head;
} 壹柒貳.
測試system內建函數的失敗時要當心一點。
usePOSIX qw ( WIFEXITED);
#稍後……
WIFEXITED(system$cmd)
Orcroak “Couldn’t run: $cmd ($OS_ERROR)”; 壹柒三.
對所有失敗都拋出異常,包括可複原的失敗。
TRY:
formy $try (1..$MAX_TRIES) {
#如果資源成功地取得,就完成了……
eval{
$resource= acquire_resource($resource_id);
LastTRY;
};
#如果不再嘗試,就報告不可複原的失敗
croak($EVAL_ERROR ) if $try == $MAX_TRIES;
#不然就在隨機拉長的時間間距後再試一次……
nap(rand fibonacci($try) ); ghd
}
do_something_using($resource); 壹柒肆.
從調用者的位置報告異常,而不要從拋出異常之處報告。 壹柒伍.
以接收者的方言編寫錯誤訊息。 壹柒陸.
以接收者的方言替每條錯誤訊息編寫說明文檔。 壹柒柒.
每當失敗資料必須傳給處理常式時,就使用異常對象。 壹柒捌.
當錯誤訊息可能改變時,就應使用異常對象。 壹柒玖.
當兩個或多個異常彼此相關時,就應使用異常對象。 壹捌零.
以MDF(most-derived-first,最底層的派生為先)次序捕獲異常對象。 壹捌壹.
自動建立異常類。 壹捌貳.
取出擴充的例外處理常式內的異常變數。
Perl 最佳實務(節選) --- 13