致命 - 用成功或死亡的等效函数替换函数
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');
Fatal 已被新的 autodie 编译指示所取代。 请优先使用 autodie 而不是 Fatal
。 autodie 支持词法作用域,抛出真正的异常对象,并提供更友好的错误消息。
不鼓励在 Fatal 中使用 :void
。
Fatal
提供了一种方便的方法来替换通常在失败时返回假值的函数,用在不成功时会引发异常的等效函数。这使您可以使用这些函数,而无需在每次调用时显式测试它们的返回值。可以使用 eval{}
捕获异常。有关详细信息,请参见 perlfunc 和 perlvar。
只需调用 Fatal 的 import
例程并传递要替换的函数名称,即可设置 do-or-die 等效项。您可以用这种方式包装用户定义的函数和可覆盖的 CORE 运算符(除了 exec
、system
、print
或任何其他无法通过原型表达的内置函数)。
如果导入列表中出现符号:void
,则该导入列表中稍后命名的函数仅在以下情况下才会引发异常:当这些函数在 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
,也不是此版本的 Fatal 理解的开关。
您要求Fatal
尝试替换一个不存在或尚未定义的子例程。
您要求Fatal
替换一个子例程,但它不是 Perl 内置函数,并且Fatal
无法将其识别为常规子例程。它要么不存在,要么尚未定义。
您尝试在无法覆盖的 Perl 内置函数(如print
或system
)上使用Fatal
,这意味着Fatal
无法帮助您,尽管其他一些模块可能可以。请参阅本文档的"另请参阅"部分。
您在Fatal
中发现了一个错误。请使用perlbug
命令报告它。
Fatal
会覆盖函数调用的上下文,并始终将其设置为标量上下文,除非使用:void
标签。此问题在autodie 中不存在。
当autodie
或Fatal
与包文件句柄(例如FILE
)一起使用时,可能会生成“仅使用一次”警告。强烈建议您改用标量文件句柄。
原始模块由 Lionel Cons(CERN)编写。
原型更新由 Ilya Zakharevich <[email protected]> 完成。
autodie 支持、错误修复、扩展诊断、system
支持,以及由 Paul Fenwick <[email protected]> 进行的大规模重构。
此模块是自由软件,您可以根据与 Perl 本身相同的条款分发它。
autodie,用于以更友好的方式使用词法 Fatal。
IPC::System::Simple,用于对 system()
和反引号调用提供类似的想法。