Perl sigdie handler and eval -


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 }