From 638098c9d6fd691493c17e19b5e475354167d6a7 Mon Sep 17 00:00:00 2001 From: Slaven Rezic Date: Sat, 20 Jan 2018 14:58:49 +0100 Subject: [PATCH] use warnings::enabled_at_level etc. for perl >= 5.27.8 (RT #123811) --- lib/DBM/Deep.pm | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/DBM/Deep.pm b/lib/DBM/Deep.pm index 762c162..994a516 100644 --- a/lib/DBM/Deep.pm +++ b/lib/DBM/Deep.pm @@ -636,21 +636,31 @@ sub clear { (shift)->CLEAR( @_ ) } sub _dump_file {shift->_get_self->_engine->_dump_file;} sub _warnif { - # There is, unfortunately, no way to avoid this hack. warnings.pm does not - # allow us to specify exactly the call frame we want. So, for now, we just - # look at the bitmask ourselves. my $level; { my($pack, $file, $line, $bitmask) = (caller $level++)[0..2,9]; redo if $pack =~ /^DBM::Deep(?:::|\z)/; - if( vec $bitmask, $warnings'Offsets{$_[0]}, 1, - || vec $bitmask, $warnings'Offsets{all}, 1, - ) { + if(defined &warnings::enabled_at_level) { # perl >= 5.27.8 + if(warnings::enabled_at_level($_[0], $level-1)) { my $msg = $_[1] =~ /\n\z/ ? $_[1] : "$_[1] at $file line $line.\n"; die $msg - if vec $bitmask, $warnings'Offsets{$_[0]}+1, 1, - || vec $bitmask, $warnings'Offsets{all}+1, 1; + if warnings::fatal_enabled_at_level($_[0], $level-1); warn $msg; + } + } else { + # In older perl versions (< 5.27.8) there is, unfortunately, no way + # to avoid this hack. warnings.pm did not allow us to specify + # exactly the call frame we want, so we have to look at the bitmask + # ourselves. + if( vec $bitmask, $warnings'Offsets{$_[0]}, 1, + || vec $bitmask, $warnings'Offsets{all}, 1, + ) { + my $msg = $_[1] =~ /\n\z/ ? $_[1] : "$_[1] at $file line $line.\n"; + die $msg + if vec $bitmask, $warnings'Offsets{$_[0]}+1, 1, + || vec $bitmask, $warnings'Offsets{all}+1, 1; + warn $msg; + } } } } -- 2.1.4