pad.c AOK "%s" variable %s masks earlier declaration in same scope my $x; my $x ; Variable "%s" will not stay shared sub x { my $x; sub y { sub { $x } } } sub x { my $x; sub y { $x } } "our" variable %s redeclared (Did you mean "local" instead of "our"?) our $x; { our $x; } %s never introduced [pad_leavemy] TODO __END__ # pad.c use warnings 'misc' ; my $x ; my $x ; my $y = my $y ; my $p ; package X ; my $p ; package main ; no warnings 'misc' ; my $x ; my $y ; my $p ; 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. "my" variable $p masks earlier declaration in same scope at - line 8. ######## # pad.c use warnings 'misc' ; our $x ; my $x ; our $y = my $y ; our $p ; package X ; my $p ; package main ; no warnings 'misc' ; our $z ; my $z ; our $t = my $t ; our $q ; package X ; my $q ; 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. "my" variable $p masks earlier declaration in same scope at - line 8. ######## # pad.c use warnings 'misc' ; my $x ; our $x ; my $y = our $y ; my $p ; package X ; our $p ; package main ; no warnings 'misc' ; my $z ; our $z ; my $t = our $t ; my $q ; package X ; our $q ; 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. "our" variable $p masks earlier declaration in same scope at - line 8. ######## # pad.c use warnings 'closure' ; sub x { my $x; sub y { $x } } EXPECT Variable "$x" will not stay shared at - line 7. ######## # pad.c no warnings 'closure' ; sub x { my $x; sub y { $x } } EXPECT ######## # pad.c use warnings 'closure' ; sub x { my $x; sub y { 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 1. ######## # pad.c use warnings 'closure' ; sub x { our $x; sub y { $x } } EXPECT ######## # 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 1. ######## 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 1. ######## 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 1. ######## # pad.c no warnings 'closure' ; sub x { my $x; sub y { sub { $x } } } EXPECT ######## # pad.c use warnings 'closure'; my $x; our $y; sub { $x = $y }->(); # should not warn about $y being unavailable EXPECT ######## use warnings 'misc' ; my $x; { my $x; } 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' ; my $x; { 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 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. ######## use warnings 'misc'; BEGIN { binmode STDERR, 'utf8'; } { use utf8; my $ニコニコ; my $ニコニコ; } EXPECT "my" variable $ニコニコ masks earlier declaration in same scope at - line 6. ######## use warnings 'misc'; BEGIN { binmode STDERR, 'utf8'; } { use utf8; my $thìs; my $thìs; } EXPECT "my" variable $thìs masks earlier declaration in same scope at - line 6. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub { use utf8; my $è; sub f { $è } }->(); EXPECT Variable "$è" is not available at - line 7. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub { use utf8; my $ニ; sub f { $ニ } }->(); EXPECT Variable "$ニ" is not available at - line 7. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub x { use utf8; my $に; sub y { $に } } EXPECT Variable "$に" will not stay shared at - line 9. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub x { use utf8; my $に; sub y { sub { $に } } } EXPECT Variable "$に" will not stay shared at - line 8. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub x { use utf8; my $に; sub { $に; sub y { $に } }->(); } EXPECT Variable "$に" will not stay shared at - line 11. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub { use utf8; my $に; sub f { $に } }->(); EXPECT Variable "$に" is not available at - line 7. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub { use utf8; my $に; sub f { eval '$に' } }->(); f(); EXPECT Variable "$に" is not available at (eval 1) line 1. ######## # pad.c # see bugid 1754 use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub f { use utf8; my $に; sub { eval '$に' }; } f()->(); EXPECT Variable "$に" is not available at (eval 1) line 1. ######## use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } { use utf8; my $に = 1; $y = \$に; # force abandonment rather than clear-in-place at scope exit sub f2 { eval '$に' } } f2(); EXPECT Variable "$に" is not available at (eval 1) line 1. ######## use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } use utf8; for my $に (1,2,3) { sub f { eval '$に' } f(); } f(); EXPECT Variable "$に" is not available at (eval 4) line 1. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub x { use utf8; my $è; sub y { $è } } EXPECT Variable "$è" will not stay shared at - line 9. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub x { use utf8; my $è; sub y { sub { $è } } } EXPECT Variable "$è" will not stay shared at - line 8. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub x { use utf8; my $è; sub { $è; sub y { $è } }->(); } EXPECT Variable "$è" will not stay shared at - line 11. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub { use utf8; my $è; sub f { $è } }->(); EXPECT Variable "$è" is not available at - line 7. ######## # pad.c use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub { use utf8; my $è; sub f { eval '$è' } }->(); f(); EXPECT Variable "$è" is not available at (eval 1) line 1. ######## # pad.c # see bugid 1754 use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } sub f { use utf8; my $è; sub { eval '$è' }; } f()->(); EXPECT Variable "$è" is not available at (eval 1) line 1. ######## use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } { use utf8; my $è = 1; $y = \$è; # force abandonment rather than clear-in-place at scope exit sub f2 { eval '$è' } } f2(); EXPECT Variable "$è" is not available at (eval 1) line 1. ######## use warnings 'closure' ; BEGIN { binmode STDERR, 'utf8'; } use utf8; for my $è (1,2,3) { sub f { eval '$è' } f(); } f(); EXPECT Variable "$è" is not available at (eval 4) line 1. ########