perl中的异常处理

时间:2013-02-24 09:25:25

标签: perl perl-module

我在eval块的末尾看到1出现在perl中的异常处理。为什么需要这个?如果eval块返回false会发生什么?

即使我们不直接使用$ @但CPAN的某些库进行异常处理,这是否需要?

2 个答案:

答案 0 :(得分:6)

如果eval块返回false会发生什么?

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以获取完整说明。