1

我正在 Windows 中编写一个 perl 应用程序,我正在使用一个调用 perl 脚本,并且有几个分层的 perl oo 模块。我想自定义 perl 处理死亡的方式。我知道使用 $SIG{ DIE } 并使用“使用 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 没有被处理程序处理。

4

2 回答 2

2

是的,有可能:“如果你真的需要捕捉到死的调用,你可以定义 CORE::GLOBAL::die”

http://www.effectiveperlprogramming.com/2011/05/override-die-with-end-or-coreglobaldie/

于 2012-05-18T03:53:17.167 回答
2

错字,不幸的是没有人被strict也抓住warnings

当您打算引用您定义的子例程时,您已经分配了对未定义子例程的引用。_death_handler_die_handler

更正错字并享受消息“我死了处理程序”(来自您的 sub _die_handler)。

于 2012-05-19T03:21:07.013 回答