As our $_; is forced into main::, it should warn as a redeclaration.
Nicholas Clark [Thu, 12 Nov 2009 17:19:48 +0000 (17:19 +0000)]
op.c
t/lib/warnings/pad

diff --git a/op.c b/op.c
index b1e8c90..dcecdb6 100644 (file)
--- a/op.c
+++ b/op.c
@@ -408,7 +408,7 @@ Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
 
     /* check for duplicate declaration */
     pad_check_dup(name, len, is_our ? pad_add_OUR : 0,
-                 (PL_curstash ? PL_curstash : PL_defstash));
+                 (PL_curstash && !strEQ(name,"$_") ? PL_curstash : PL_defstash));
 
     /* allocate a spare slot and store the name in that slot */
 
index bf5c367..54d72cd 100644 (file)
@@ -312,3 +312,18 @@ use strict;
 use warnings;
 our $x unless $x;
 EXPECT
+########
+use warnings 'misc';
+our $qunckkk;
+our $_;
+package clank_est;
+our $qunckkk;
+our $_;
+no warnings 'misc';
+our $ouch;
+our $_;
+package whack;
+our $ouch;
+our $_;
+EXPECT
+"our" variable $_ redeclared at - line 6.