內容

名稱

致命 - 用會成功或死亡的等效函式取代

簡介

use Fatal qw(open close);

open(my $fh, "<", $filename);  # No need to check errors!

use File::Copy qw(move);
use Fatal qw(move);

move($file1, $file2); # No need to check errors!

sub juggle { . . . }
Fatal->import('juggle');

最佳實踐

新的autodie pragma 已經取代了 Fatal。 請優先使用autodieautodie支援詞法範圍,拋出真正的例外物件,並提供更好的錯誤訊息。

不建議使用 Fatal 與 :void

描述

Fatal 提供了一種方便的方式來取代通常在失敗時返回假值的函式,使之在不成功時引發例外。這讓您可以在每次呼叫時都無需明確地測試其返回值就使用這些函式。異常可以使用eval{}來捕獲。有關詳細資訊,請參閱perlfuncperlvar

透過調用 Fatal 的 import 函式並將要替換的函式名稱傳遞給它,可以簡單地設置做或死等效。您可以以這種方式包裝用戶定義的函式和可覆蓋的 CORE 運算子(除了execsystemprint或任何無法通過原型表達的內建函式)。

如果在導入列表中出現符號:void,則後面列出的函式只有在被調用於空上下文時(即,其返回值被忽略時)才引發例外。例如

use Fatal qw/:void open close/;

# properly checked, so no exception raised on error
if (not open(my $fh, '<', '/bogotic') {
    warn "Can't open /bogotic: $!";
}

# not checked, so error raises an exception
close FH;

不建議使用 :void,因為如果您在無 void 上下文中 意外 調用方法,可能會導致例外情況不被拋出。如果您需要能夠為一小段程式碼禁用自動死亡/致命行為,請改用 autodie

診斷

Fatal 的不良子程序名稱:%s

您呼叫了 Fatal,但其參數看起來既不像一個子程序名稱,也不像此版本的 Fatal 可以理解的開關。

%s 不是 Perl 子程序

您要求 Fatal 嘗試替換一個不存在的子程序,或者尚未定義。

%s 不是內建,也不是 Perl 子程序

您要求 Fatal 替換一個子程序,但它不是 Perl 內建的,且 Fatal 找不到它作為常規子程序。它可能不存在,或尚未定義。

無法使不可覆蓋的 %s 致命

您試圖在 Perl 內建上使用 Fatal,但它無法被覆蓋,例如 printsystem,這意味著 Fatal 無法幫助您,儘管其他一些模塊可能會。請參閱本文檔的 「參見」 部分。

內部錯誤:%s

您發現了 Fatal 中的一個錯誤。請使用 perlbug 命令報告。

缺陷

Fatal 會破壞調用函數的上下文,並始終使其成為純量上下文,除非使用了 :void 標籤。這個問題在 autodie 中不存在。

在使用包文件句柄(例如 FILE)時,可能會生成“僅使用一次”警告,當使用 autodieFatal 時。強烈建議使用純量文件句柄。

作者

原始模組由 Lionel Cons(CERN)創建。

原型更新由 Ilya Zakharevich <ilya@math.ohio-state.edu> 完成。

autodie 支持、錯誤修復、擴展診斷、system 支持,以及由 Paul Fenwick <pjf@perltraining.com.au> 進行的重大改版。

LICENSE

此模組為免費軟體,您可以按照與 Perl 本身相同的條款進行分發。

參見

autodie 提供了一種更好的方式來使用 lexical Fatal。

IPC::System::Simple 提供了對於 system() 和反引號調用的類似概念。