您可以使用 Perl 的eval
语句来捕获异常,包括那些试图在未定义参数上调用方法的异常:
eval {
say $shop->ShopperDueDate->day_name();
};
由于eval
返回评估的最后一条语句,或者undef
失败时,您可以将日期名称记录在变量中,如下所示:
my $day_name = eval { $shop->ShopperDueDate->day_name(); };
如果您确实希望检查异常,可以查看特殊变量$@
。这通常是 Perl 内置异常的简单字符串,但如果异常源自autodie或其他使用对象异常的代码,则可能是完整的异常对象。
eval {
say $shop->ShopperDueDate->day_name();
};
if ($@) {
say "The error was: $@";
}
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
经常使用,很容易忘记这些。
保罗