我编写了自己的异常处理程序,类似于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.