我可以从我的调用脚本中覆盖perl项目中的全局模块吗?

时间:2012-05-18 03:35:17

标签: perl perl-module

我正在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不会被处理程序处理。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

Typo,遗憾的是没有被strictwarnings抓住;

当您想要引用您定义的子例程_death_handler时,您已经分配了对 undefined 子例程_die_handler的引用。

纠正拼写错误并享受“我死的处理程序”(来自你的_die_handler)消息。