Eva*_*oll 6 perl signals eval carp die
假设您使用 cpan(或其他外部)模块,就像我们在这里虚构的那样 Stupid::CPAN::Module::OfSatan
package Stupid::CPAN::Module::OfSatan {
BEGIN { $SIG{__DIE__} = sub { print STDERR "ERROR"; exit; }; }
}
Run Code Online (Sandbox Code Playgroud)
现在在你的代码中你有一些非常无辜的东西,
package main {
eval { die 42 };
}
Run Code Online (Sandbox Code Playgroud)
这将触发您的错误信号处理程序。你会想知道那个有问题的信号处理程序是在哪里定义的,所以你会做一些合乎逻辑的事情,比如插入一个Carp::Always
,
package main {
use Carp::Always;
eval { die 42 };
}
Run Code Online (Sandbox Code Playgroud)
Carp::Always
然后将覆盖有问题的信号处理程序,您的代码将神奇地工作。您如何调试引入错误信号处理程序的代码?
Devel::Confess
从此,mst
irc.freenode.net/#perl
< mst> EvanCarroll: Devel::Confess honours the old signal handlers
< mst> EvanCarroll: it's basically a better Carp::Always
< EvanCarroll> Cool cool, thanks for that tidbit.
Run Code Online (Sandbox Code Playgroud)