2012-05-18 60 views
1

我在Windows中編寫了一個perl應用程序,我正在使用一個調用perl腳本,並且有幾個分層的perl oo模塊。我想自定義perl處理死的方式。 我知道使用$ SIG {DIE}並使用「use subs die」,但是我可以只將它放入我的調用腳本中,並且現在期望現在,如果我的應用程序中的任何模塊只會經過此處理程序?我可以從我的調用腳本中全局覆蓋我的perl項目中的全局死亡?

我已經試過這樣的事情,但沒有奏效:

$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"; 
} 

這似乎只有當我打電話從調用腳本模工作,但是從Mypackage調用的死亡並沒有得到處理程序的處理。

+0

@ikegami,OP所面臨的問題,我認爲,'__DIE__'處理程序是對錯字子程序的引用... – pilcrow

回答

2

是的,這是可能的:「如果你真的需要捕捉調用死了,你可以定義CORE :: GLOBAL ::死」

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

+0

我不能把CORE :: GLOBAL :: die處理程序BEGIN以外。我正在嘗試將die錯誤消息集成到我的Log4perl日誌文件中。因此,如果我將它放入BEGIN並初始化處理程序,則每次我的ide使用運行時檢查sytax錯誤時,都會創建日誌文件。 – Kallol

+0

鏈接已損壞。 – Flimm

2

錯字,遺憾的是沒有一個由strict也不抓warnings;

您已經分配給未定義子程序_death_handler的參考,當你打算引用你沒有定義的子程序,_die_handler

糾正錯字,並享受信息「我死處理程序」(從您的子_die_handler)。

相關問題