This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
overload.pm: add a missing 'exists'
authorDan Collins <dcollinsn@gmail.com>
Tue, 11 Oct 2016 18:54:16 +0000 (14:54 -0400)
committerDavid Mitchell <davem@iabyn.com>
Mon, 26 Dec 2016 12:03:10 +0000 (12:03 +0000)
607ee4356 changed the hash of permitted ops from having '1' as a value
to having undef as a value. This also changed one of the warning points
from checking for truthiness to existence. However, a second warning
was accidentally left checking for truthiness. This commit fixes that
oversight, and adds a regression test for warnings in this case.

lib/overload.pm
t/lib/overload_fallback.t

index 758b67d..ba56314 100644 (file)
@@ -1,6 +1,6 @@
 package overload;
 
-our $VERSION = '1.27';
+our $VERSION = '1.28';
 
 %ops = (
     with_assign         => "+ - * / % ** << >> x .",
@@ -63,7 +63,7 @@ sub unimport {
   *{$package . "::(("} = \&nil;
   for (@_) {
       warnings::warnif("overload arg '$_' is invalid")
-        unless $ops_seen{$_};
+        unless exists $ops_seen{$_};
       delete $ {$package . "::"}{$_ eq 'fallback' ? '()' : "(" .$_};
   }
 }
index a72d499..6672251 100644 (file)
@@ -5,7 +5,7 @@ BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
     require './test.pl';
-    plan( tests => 3 );
+    plan(tests => 4);
 }
 
 use overload '""' => sub { 'stringvalue' }, fallback => 1;
@@ -33,3 +33,16 @@ my $value = bless \(my $dummy = 1), __PACKAGE__;
 print ++$value;
 EOC
 }
+
+{
+    my $warned = 0;
+    local $SIG{__WARN__} = sub { $warned++; };
+
+    eval q{
+        use overload '${}', 'fallback';
+        no overload '${}', 'fallback';
+    };
+
+    ok($warned == 0, 'no overload should not warn');
+}
+