Logger モジュール内で以下のように SIG ダイ ハンドラーをオーバーライドしています。
# Catch die messages and log them with logdie
$SIG{__DIE__} = \&logdie;
以下のプログラムは期待どおりに実行され、後処理が呼び出されます。
use strict;
use warnings;
use File::Path;
# use MyLogger;
my $dir="/random";
eval {
# local $SIG{__DIE__};
File::Path::make_path($dir);
};
if($@) {
warn("Cannot create $dir :$@ \n");
}
print "Post processing \n";
ただし、ロガーモジュールを含めてuse MyLogger
コードを追加するeval
と、以下のエラーでステートメント内で失敗し、後処理が呼び出されません。
[エラー] 2015/04/27 22:19:07 Carp.pm:166> mkdir /random: ./test.pl 行 11 で許可が拒否されました。
これを修正してローカル sigdie ハンドルを追加するオプションの 1 つ (コメント付きのコードを参照)。
ただし、私のロガー モジュールは多くのスクリプトで使用されています。
ロガー モジュールを変更して、eval ブロック内から呼び出されたときに ERROR メッセージを抑制する方法はありますか?