The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
  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.
########