我正在从Java代码生成Perl代码,并尝试模拟try
catch
机制。
我不能使用外部库。我找到了两种可能的方法来模拟这种行为:
第一个:
eval {
...
};
if ($@) {
errorHandler($@);
}
第二
unless(.....){
// handle the error
}
我对Perl的了解很少。据我所知,第一个解决方案使我能够执行多个命令,而第二个解决方案使我只能执行1个命令。 但是,我也看到不推荐使用eval。
这样做的“正确”方法是什么?
答案 0 :(得分:4)
你的第二个片段根本没有捕获异常,所以它不是一个选项。您在核心 [1] 中的选项是:
my $rv;
if (!eval { $rv = f(); 1 } ) {
...
}
my $rv = eval { f() };
if ($@) {
...
}
下行:在5.14之前,如果对象析构函数崩溃$@
,则不会注意到异常。
核心之外,
答案 1 :(得分:1)
Eval是我们在工作中使用的典型方法,但Try::Tiny
是一个相当小的模块,使用起来很简单。但是,因为您不想使用任何外部模块。
unless
实际上不是一个可行的选项,因为它不会捕获die
或croak
的代码片段。所以你留下了eval
。
# named special variables
use English qw(-no_match_vars);
eval {
# try
};
if ($EVAL_ERROR) {
# catch
}