在Perl中,内部eval {}内部发生的错误也可以被外部eval {}捕获?

时间:2011-07-06 09:43:34

标签: perl eval

这个功能不太清楚。

情况是我们有API,它有自己的eval catch,它通常返回一个状态。 我们使用这个API并且需要有关执行的特定状态,我们的想法是使用外部eval来捕获API引发的任何错误。可能吗 ?或者它被内部评估忽略了。

2 个答案:

答案 0 :(得分:2)

如果API在“捕获”错误时“抛出”错误,那么是的,您的外部die可以“抓住”它并按需要处理它。如果API捕获并且只返回错误代码,例如返回值,那么您不需要外部eval。更具体的例子可能会有所帮助......

答案 1 :(得分:0)

会工作,结帐这个例子......

use strict;
use warnings;

eval { api_function(); };

if ($@) {
    warn "Oops! API error!";
}

sub api_function {

    eval {
        my $a = 1;

        my $x = 1 / $a;
    };

    if ($@) {
        warn "Oops! error!";
    }

    my $a = 0;

    my $x = 1 / $a;
}