我正在Windows中编写一个perl应用程序,我正在使用一个调用perl脚本,并且有几个分层的perl oo模块。我想自定义perl句柄的方式。 我知道使用$ SIG { DIE }并使用“use subs die”但是我可以将它只放入我的调用脚本中并且期望现在,如果我的应用程序中的任何模块都将通过此只有处理程序?
我尝试了类似的东西,但没有奏效:
$SIG{__DIE__} = \&_death_handler;
use Mypackage;
my $obj = Mypackage->new();
$obj->init;
sub _die_handler {
print "I die handler\n";
}
Mypackage看起来像这样:
package Mypackage;
sub new {
.....
.....
}
sub init {
my $self = shift;
die "error\n";
}
这似乎仅在我从调用脚本调用die时才起作用,但是从Mypackage调用的die不会被处理程序处理。
答案 0 :(得分:2)
是的,有可能:“如果你真的需要捕捉死亡的召唤,你可以定义CORE :: GLOBAL :: die”
http://www.effectiveperlprogramming.com/2011/05/override-die-with-end-or-coreglobaldie/
答案 1 :(得分:2)
Typo,遗憾的是没有被strict
或warnings
抓住;
当您想要引用您定义的子例程_death_handler
时,您已经分配了对 undefined 子例程_die_handler
的引用。
纠正拼写错误并享受“我死的处理程序”(来自你的_die_handler
)消息。