我在eval块的末尾看到1出现在perl中的异常处理。为什么需要这个?如果eval块返回false会发生什么?
即使我们不直接使用$ @但CPAN的某些库进行异常处理,这是否需要?
答案 0 :(得分:6)
eval
返回该错误值。
这不是必需的。
my $foo = eval { foo() };
如果你对$foo
在异常情况下是不确定的话,那就完全没问了。
你看到的是
if (!eval { foo(); 1 }) {
...
}
代码返回true,让if
知道eval
成功。 eval
将在异常时返回false。
答案 1 :(得分:0)
扩展ikegami的答案:大多数人都写这样的代码:
eval { might_throw_exception() };
if ($@) { ... }
这在5.14之前是错误的,因为$@
可能不是真值,即使由于析构函数覆盖它或其他因素而引发异常。 return 1
是一种解决方法;请参阅Try::Tiny以获取完整说明。