我有一个使用的模块
Carp::confess "<message here>"
(假设此语句在子例程B中)。根据我的解释,消息将输出到STDERR,应用程序应该在那时终止。但是应用程序不会终止。我在confess语句之前和之后放置了一个print语句,以确保confess语句确实执行。
我甚至检查了调用子例程的子例程A是否定义了一个eval {}块来捕获错误而不对其进行操作。但情况似乎并非如此。
还有其他场景,Carp :: confess不会终止程序吗?我对此感到有点困惑。
感谢您
答案 0 :(得分:0)
eval BLOCK
,eval EXPR
,do EXPR
和调用Perl代码的XS代码是唯一能够捕获异常的内容。
也有可能首先抛出异常,例如当die
被严重覆盖时。