&& sv != &PL_sv_undef
&& !SvFAKE(sv)
&& (SvIVX(sv) == PAD_MAX || SvIVX(sv) == 0)
- && !(is_our && (SvFLAGS(sv) & SVpad_OUR))
&& strEQ(name, SvPVX_const(sv)))
{
+ if (is_our && (SvFLAGS(sv) & SVpad_OUR))
+ break; /* "our" masking "our" */
Perl_warner(aTHX_ packWARN(WARN_MISC),
"\"%s\" variable %s masks earlier declaration in same %s",
(is_our ? "our" : "my"),
{
Perl_warner(aTHX_ packWARN(WARN_MISC),
"\"our\" variable %s redeclared", name);
- Perl_warner(aTHX_ packWARN(WARN_MISC),
- "\t(Did you mean \"local\" instead of \"our\"?)\n");
+ if (off <= PL_comppad_name_floor)
+ Perl_warner(aTHX_ packWARN(WARN_MISC),
+ "\t(Did you mean \"local\" instead of \"our\"?)\n");
break;
}
} while ( off-- > 0 );
20
########
-# multiple our declarations in same scope, same package, no warning
+# multiple our declarations in same scope, same package, warning
use strict 'vars';
use warnings;
our $foo;
${foo} = 10;
our $foo;
EXPECT
-
+"our" variable $foo redeclared at - line 7.
########
# multiple our declarations in same scope, same package, warning
our $foo;
{
our $foo;
+ our $foo;
package Foo;
our $foo;
}
EXPECT
"our" variable $foo redeclared at - line 9.
(Did you mean "local" instead of "our"?)
+"our" variable $foo redeclared at - line 10.
########
--FILE-- abc
pad.c AOK
- "my" variable %s masks earlier declaration in same scope
+ "%s" variable %s masks earlier declaration in same scope
my $x;
my $x ;
# pad.c
use warnings 'misc' ;
our $x ;
-our $x ;
-our $y = our $y ;
-our $p ;
-package X ;
-our $p ;
-EXPECT
-########
-# pad.c
-use warnings 'misc' ;
-our $x ;
my $x ;
our $y = my $y ;
our $p ;
}
EXPECT
########
+# pad.c
+use warnings 'misc' ;
+our $x ;
+our $x ;
+our $y = our $y ;
+our $p ;
+package X ;
+our $p ;
+package main ;
+no warnings 'misc' ;
+our $a ;
+our $a ;
+our $b = our $b ;
+our $c ;
+package X ;
+our $c ;
+EXPECT
+"our" variable $x redeclared at - line 4.
+"our" variable $y redeclared at - line 5.
+########
use warnings 'misc' ;
our $x;
{
our $x;
}
+our $x;
+no warnings 'misc' ;
+our $y;
+{
+ our $y;
+}
+our $y;
EXPECT
"our" variable $x redeclared at - line 4.
(Did you mean "local" instead of "our"?)
+"our" variable $x redeclared at - line 6.
########
use warnings 'misc' ;
our $x;
{
my $x;
}
+no warnings 'misc' ;
+our $y;
+{
+ my $y;
+}
EXPECT
########
use warnings 'misc' ;
{
our $x;
}
+no warnings 'misc' ;
+my $y;
+{
+ our $y;
+}
+EXPECT
+########
+use warnings 'misc' ;
+my $x;
+{
+ my $x;
+}
+no warnings 'misc' ;
+my $y;
+{
+ my $y;
+}
EXPECT
########
# an our var being introduced should suppress errors about global syms