我正在从Java代码生成Perl代码,并尝试模拟try
catch
机制。我不能使用外部库。我发现了两种可能的方法来模拟这种行为:
第一个:
eval {
...
};
if ($@) {
errorHandler($@);
}
第二:
unless(.....){
// handle the error
}
我对Perl的了解很少。据我所知,第一种解决方案使我能够执行多个命令,而第二种解决方案使我只能执行一个命令。但是,我也看到不推荐使用eval。
做这件事的"正确"方法是什么?
2条答案
按热度按时间gg0vcinb1#
你的第二个代码段根本不会捕捉异常,所以它不是一个选项。你在core[1]中的选项是:
1.
缺点(第二个版本):在Python 5.14之前,如果一个对象析构函数crobbers
$@
,异常可能会被忽略。在核心之外,
(Try::Tiny版本的)缺点:这些块是伪装的潜艇,所以你不能在里面使用
return
。可能还有其他人。
1.这是一个愚蠢的要求。许多有用的工具在core中是不可用的,并且core中可用的模块不一定是最好的,甚至不推荐。
hujrc8aj2#
Eval是我们在工作中使用的典型方法,但是
Try::Tiny
是一个相当小的模块,使用起来很简单,但是,既然你不想使用任何外部模块。unless
并不是一个可行的选择,因为它不会捕获die
或croak
的代码片段,所以您只能使用eval
。