diff --git a/dist/Storable/__Storable__.pm b/dist/Storable/__Storable__.pm index 9237371234..c4f0e5a851 100644 --- a/dist/Storable/__Storable__.pm +++ b/dist/Storable/__Storable__.pm @@ -39,39 +39,32 @@ $recursion_limit_hash = 256 use Carp; -BEGIN { - if (eval { - local $SIG{__DIE__}; - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; - require Log::Agent; - 1; - }) { - Log::Agent->import; - } - # - # Use of Log::Agent is optional. If it hasn't imported these subs then - # provide a fallback implementation. - # - unless ($Storable::{logcroak} && *{$Storable::{logcroak}}{CODE}) { - *logcroak = \&Carp::croak; - } - else { - # Log::Agent's logcroak always adds a newline to the error it is - # given. This breaks refs getting thrown. We can just discard what - # it throws (but keep whatever logging it does) and throw the original - # args. - no warnings 'redefine'; - my $logcroak = \&logcroak; - *logcroak = sub { - my @args = @_; - eval { &$logcroak }; - Carp::croak(@args); - }; - } - unless ($Storable::{logcarp} && *{$Storable::{logcarp}}{CODE}) { - *logcarp = \&Carp::carp; - } +sub logcroak { + goto &Log::Agent::logcroak + if do { + local ($@, $!, $SIG{__DIE__}); + eval { require Log::Agent }; + exists &Log::Agent::logcroak; + }; + goto &Carp::croak + if do { + local ($@, $!); + require Carp; + }; +} + +sub logcarp { + goto &Log::Agent::logcarp + if do { + local ($@, $!, $SIG{__DIE__}); + eval { require Log::Agent }; + exists &Log::Agent::logcarp; + }; + goto &Carp::carp + if do { + local ($@, $!); + require Carp; + }; } #