i overriding sig die handler below inside logger module.
# catch die messages , log them logdie $sig{__die__} = \&logdie;
now below program run expected , post processing called.
use strict; use warnings; use file::path; # use mylogger; $dir="/random"; eval { # local $sig{__die__}; file::path::make_path($dir); }; if($@) { warn("cannot create $dir :$@ \n"); } print "post processing \n";
however, if include logger module , add use mylogger
code fails inside eval
statment below error , post processing not called.
[error] 2015/04/27 22:19:07 carp.pm:166> mkdir /random: permission denied @ ./test.pl line 11.
one option fix add local sigdie handle (as shown in commented code).
however, logger module used many scripts.
is there way modify logger module supresses error message when called inside eval block ?
the $^s
indicates whether current execution point inside of eval
block:
$^s state --------- ------------------------------------- undef parsing module, eval, or main program true (1) executing eval false (0) otherwise
so sounds want check whether $^s
true @ beginning of __die__
handler:
package mylogger; sub logdie { $^s && die $_[0]; # use default die handler ... # else use custom die handler }