使用concury/craw/cluck省略错误处理程序的最顶层调用方



我编写了自己的异常处理程序,类似于catch2 { some_code } [optional params]。它起作用,在未处理异常时调用confess。为了简单起见,我把它直接放在需要的包中。然而,最上面的呼叫帧包括我的catch2

我怎么能简单地省略它呢?

在我看来,这两者都没有帮助,因为它们指的是包,而不是每个子包:

@CARP_NOT
%Carp::Internal
%Carp::CarpInternal

$Carp::CarpLevel=1似乎做到了,但文档说不应该使用它(perl5.18.2(

要从实现异常处理的模块中省略调用帧,请使用:

use Carp;
$Carp::Internal{(__PACKAGE__)} = 1;

您可能对Perl错误"#132281:改进%Carp::Internal上的文档"也感兴趣。

对于我在ExES.pl中实现的实验性异常处理包ExES,以及一些测试代码(在包main中(,区别如下:

默认消息:

catch(): Illegal division by zero at ExES.pl line 78.
at ExES.pl line 36.
ExES::catch(CODE(0x558a56b9cdb8), undef) called at ExES.pl line 48
ExES::catch2(CODE(0x558a56b9cdb8)) called at ExES.pl line 78

应用解决方案后,输出为:

catch(): Illegal division by zero at ExES.pl line 78.
at ExES.pl line 78.

最新更新