在BEGIN块中的eval中捕获错误时,未设置$ ^ S.

时间:2013-04-11 19:14:07

标签: perl

由于某种原因,当BEGIN块中的eval捕获到错误时,未设置$^S ($EXCEPTIONS_BEING_CAUGHT)变量。例如:

use v5.14;

BEGIN {
    $SIG{__DIE__} = sub {
        say '$^S = ' . ( $^S // 'undef' );
    };
};

BEGIN {
    eval { die 'died in BEGIN - with eval'; };
};
eval { die 'die in eval' };
die 'regular die';

预期产出:

$^S = 1                                                                                                                                                                                               
$^S = 1
$^S = 0

实际输出:

$^S = undef                                                                                                                                                                                               
$^S = 1
$^S = 0

有没有人见过这个?我试图搜索一个解决方法,但无法找到一个。 这是预期的行为还是Perl中的错误?

修改:我理解为什么undef。更重要的问题(对我而言)是否可以知道我是否从自定义错误处理程序中的eval中捕获错误,即使它位于BEGIN块中?我本来应该问的是,“这是预期的......”

0 个答案:

没有答案