1

私は Windows で perl アプリケーションを作成しています。ここでは、呼び出し元の perl スクリプトを使用しており、いくつかの階層的な perl oo モジュールがあります。perl が die を処理する方法をカスタマイズしたいと思います。$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 はハンドラーによって処理されません。

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

タイプミス、残念ながら、strictnor でキャッチされたものはありませんwarnings

定義したサブルーチンを参照するつもりだったときに、未定義のサブルーチンへの参照を割り当てました。_death_handler_die_handler

タイプミスを修正して、「I die handler」というメッセージをお楽しみください (サブ から_die_handler)。

于 2012-05-19T03:21:07.013 に答える