my $x;
my $x ;
- Variable "%s" may be unavailable
+ Variable "%s" will not stay shared
sub x {
my $x;
sub y {
- $x
+ sub { $x }
}
}
- Variable "%s" will not stay shared
sub x {
my $x;
sub y {
- sub { $x }
+ $x
}
}
+
"our" variable %s redeclared (Did you mean "local" instead of "our"?)
our $x;
{
"my" variable $y masks earlier declaration in same statement at - line 5.
########
# pad.c
+use warnings 'misc' ;
+our $x ;
+our $x ;
+our $y = our $y ;
+no warnings 'misc' ;
+our $x ;
+our $y ;
+EXPECT
+"our" variable $x masks earlier declaration in same scope at - line 4.
+"our" variable $y masks earlier declaration in same statement at - line 5.
+########
+# pad.c
+use warnings 'misc' ;
+our $x ;
+my $x ;
+our $y = my $y ;
+no warnings 'misc' ;
+our $z ;
+my $z ;
+our $t = my $t ;
+EXPECT
+"my" variable $x masks earlier declaration in same scope at - line 4.
+"my" variable $y masks earlier declaration in same statement at - line 5.
+########
+# pad.c
+# TODO not implemented yet
+use warnings 'misc' ;
+my $x ;
+our $x ;
+my $y = our $y ;
+no warnings 'misc' ;
+my $z ;
+our $z ;
+my $t = our $t ;
+EXPECT
+"our" variable $x masks earlier declaration in same scope at - line 5.
+"our" variable $y masks earlier declaration in same statement at - line 6.
+########
+# pad.c
use warnings 'closure' ;
sub x {
my $x;
# pad.c
use warnings 'closure' ;
sub x {
- our $x;
+ my $x;
sub y {
- $x
+ sub { $x }
}
}
EXPECT
+Variable "$x" will not stay shared at - line 6.
+########
+# pad.c
+use warnings 'closure' ;
+sub x {
+ my $x;
+ sub {
+ $x;
+ sub y {
+ $x
+ }
+ }->();
+}
+EXPECT
+Variable "$x" will not stay shared at - line 9.
+########
+# pad.c
+use warnings 'closure' ;
+my $x;
+sub {
+ $x;
+ sub f {
+ sub { $x }->();
+ }
+}->();
+EXPECT
########
# pad.c
use warnings 'closure' ;
+sub {
+ my $x;
+ sub f { $x }
+}->();
+EXPECT
+Variable "$x" is not available at - line 5.
+########
+# pad.c
+use warnings 'closure' ;
+sub {
+ my $x;
+ eval 'sub f { $x }';
+}->();
+EXPECT
+
+########
+# pad.c
+use warnings 'closure' ;
+sub {
+ my $x;
+ sub f { eval '$x' }
+}->();
+f();
+EXPECT
+Variable "$x" is not available at (eval 1) line 2.
+########
+# pad.c
+use warnings 'closure' ;
sub x {
- my $x;
+ our $x;
sub y {
- sub { $x }
+ $x
}
}
EXPECT
-Variable "$x" may be unavailable at - line 6.
+
+########
+# pad.c
+# see bugid 1754
+use warnings 'closure' ;
+sub f {
+ my $x;
+ sub { eval '$x' };
+}
+f()->();
+EXPECT
+Variable "$x" is not available at (eval 1) line 2.
+########
+use warnings 'closure' ;
+{
+ my $x = 1;
+ $y = \$x; # force abandonment rather than clear-in-place at scope exit
+ sub f2 { eval '$x' }
+}
+f2();
+EXPECT
+Variable "$x" is not available at (eval 1) line 2.
+########
+use warnings 'closure' ;
+for my $x (1,2,3) {
+ sub f { eval '$x' }
+ f();
+}
+f();
+EXPECT
+Variable "$x" is not available at (eval 4) line 2.
########
# pad.c
no warnings 'closure' ;
EXPECT
"our" variable $x redeclared at - line 4.
(Did you mean "local" instead of "our"?)
+########
+# an our var being introduced should suppress errors about global syms
+use strict;
+use warnings;
+our $x unless $x;
+EXPECT