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