由于某种原因,当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块中?我本来应该问的是,“这是预期的......”