Use of uninitialized value $m1 in addition (+) at - line 6.
########
use warnings 'uninitialized';
+use utf8;
+use open qw( :utf8 :std );
+
+$v = $à1 + 10;
+$v = 22 + $a2;
+$v = $à1 + $a2;
+EXPECT
+Use of uninitialized value $à1 in addition (+) at - line 5.
+Use of uninitialized value $a2 in addition (+) at - line 6.
+Use of uninitialized value $a2 in addition (+) at - line 7.
+Use of uninitialized value $à1 in addition (+) at - line 7.
+########
+use warnings 'uninitialized';
my ($m1, $v);
our ($g1, $g2);
close $m1; # exercises rv2gv
close $g1; # exercises rv2gv
+close undef; # exercises rv2gv
EXPECT
Use of uninitialized value $m1 in ref-to-glob cast at - line 5.
Use of uninitialized value $g1 in ref-to-glob cast at - line 6.
+Use of uninitialized value in ref-to-glob cast at - line 7.
########
use warnings 'uninitialized';
my ($m1, $m2, $v);
EXPECT
Use of uninitialized value $s1 in scalar chomp at - line 3.
Use of uninitialized value $s2 in scalar chop at - line 4.
-Use of uninitialized value $s4 in chomp at - line 5.
Use of uninitialized value $s3 in chomp at - line 5.
+Use of uninitialized value $s4 in chomp at - line 5.
Use of uninitialized value $s5 in chop at - line 6.
Use of uninitialized value $s6 in chop at - line 6.
########
EXPECT
Use of uninitialized value ${$/} in scalar chomp at - line 6.
Use of uninitialized value ${$/} in chomp at - line 8.
-Use of uninitialized value $y in chomp at - line 8.
Use of uninitialized value ${$/} in chomp at - line 8.
+Use of uninitialized value $y in chomp at - line 8.
Use of uninitialized value $y in chop at - line 8.
########
use warnings 'uninitialized';
use warnings 'uninitialized';
my ($m1, $m2);
my ($v, @a);
+my ($t, $u) = (1, 1);
local $.;
-@ma = (1 .. 2);
+@ma = (1 .. 2);
+@ma = ($t .. 2);
@ma = ($m1 .. 2);
-@ma = (1 .. $m2);
-@ma = ($m1 .. $m2);
+@ma = (1 .. $u);
+@ma = (1 .. $m2);
-$v = (1 .. 2);
+@ma = (1 ... 2);
+@ma = ($t ... 2);
+@ma = ($m1 ... 2);
+@ma = (1 ... $u);
+@ma = (1 ... $m2);
+
+$v = (1 .. 2);
+$v = ($t .. 2);
$v = ($m1 .. 2);
-$v = (1 .. $m2);
+$v = (1 .. $u);
+$v = (1 .. $m2);
+
+$v = (1 ... 2);
+$v = ($t ... 2);
+$v = ($m1 ... 2);
+$v = (1 ... $u);
+$v = (1 ... $m2);
+EXPECT
+Use of uninitialized value $m1 in range (or flop) at - line 10.
+Use of uninitialized value $m2 in range (or flop) at - line 12.
+Use of uninitialized value $m1 in range (or flop) at - line 16.
+Use of uninitialized value $m2 in range (or flop) at - line 18.
+Use of uninitialized value $. in range (or flip) at - line 20.
+Use of uninitialized value $. in range (or flop) at - line 21.
+Use of uninitialized value $. in range (or flip) at - line 23.
+Use of uninitialized value $. in range (or flip) at - line 24.
+Use of uninitialized value $. in range (or flip) at - line 26.
+Use of uninitialized value $. in range (or flip) at - line 29.
+Use of uninitialized value $. in range (or flip) at - line 30.
+########
+use warnings 'uninitialized';
+my ($m1, $m2);
+my ($v, @a);
+my ($t, $u) = (1, 1);
+
+@ma = ($t .. $u);
+@ma = ($m1 .. $u);
+@ma = ($t .. $m2);
+@ma = ($m1 .. $m2);
+
+@ma = ($t ... $u);
+@ma = ($m1 ... $u);
+@ma = ($t ... $m2);
+@ma = ($m1 ... $m2);
+
+$v = ($t .. $u);
+$v = ($m1 .. $u);
+$v = ($t .. $m2);
$v = ($m1 .. $m2);
+
+$v = ($t ... $u);
+$v = ($m1 ... $u);
+$v = ($t ... $m2);
+$v = ($m1 ... $m2);
EXPECT
-Use of uninitialized value $m1 in range (or flop) at - line 8.
+Use of uninitialized value $m1 in range (or flop) at - line 7.
+Use of uninitialized value $m2 in range (or flop) at - line 8.
+Use of uninitialized value $m1 in range (or flop) at - line 9.
Use of uninitialized value $m2 in range (or flop) at - line 9.
-Use of uninitialized value in range (or flop) at - line 10.
-Use of uninitialized value in range (or flop) at - line 10.
-Use of uninitialized value $. in range (or flip) at - line 12.
-Use of uninitialized value $. in range (or flip) at - line 14.
+Use of uninitialized value $m1 in range (or flop) at - line 12.
+Use of uninitialized value $m2 in range (or flop) at - line 13.
+Use of uninitialized value $m1 in range (or flop) at - line 14.
+Use of uninitialized value $m2 in range (or flop) at - line 14.
########
use warnings 'uninitialized';
my ($m1, $v);
@sort = sort {$a <=> $b} $m1, $g1;
sub sortf {$a-1 <=> $b-1};
@sort = sort &sortf, $m1, $g1;
+@sort = sort { undef } 1, 2;
+sub frobnicate($$) { undef }
+@sort = sort frobnicate 1, 2;
+@sort = sort pyfg 1, 2;
+@sort = sort pyfgc 1, 2;
+no warnings;
+sub pyfg { undef }
+sub pyfgc($$) { undef }
+use warnings;
+sub dog {}
+sub dogwood($$) {}
+@sort = sort dog 1,2;
+@sort = sort dogwood 1,2;
EXPECT
Use of uninitialized value $m1 in sort at - line 6.
Use of uninitialized value $g1 in sort at - line 6.
Use of uninitialized value $m1 in sort at - line 9.
Use of uninitialized value $g1 in sort at - line 9.
Use of uninitialized value $g1 in sort at - line 9.
+Use of uninitialized value in sort at - line 10.
+Use of uninitialized value in sort at - line 12.
+Use of uninitialized value in sort at - line 13.
+Use of uninitialized value in sort at - line 14.
+Use of uninitialized value in sort at - line 21.
+Use of uninitialized value in sort at - line 22.
+########
+my $nan = sin 9**9**9;
+if ($nan == $nan) {
+ print <<EOM ;
+SKIPPED
+# No nan support
+EOM
+ exit ;
+}
+use warnings 'uninitialized';
+# The optimised {$a<=>$b} case should behave the same way as unoptimised.
+@sort = sort { ($a)[0] <=> $b } 1, $nan;
+@sort = sort { $a <=> $b } 1, $nan;
+EXPECT
+Use of uninitialized value in sort at - line 11.
+Use of uninitialized value in sort at - line 12.
########
use warnings 'uninitialized';
my ($m1, $m2, $v);
Use of uninitialized value $m1 in subtraction (-) at - line 20.
########
use warnings 'uninitialized';
+sub TIESCALAR{bless[]}
+sub FETCH { undef }
+
+tie my $m1, "";
+my $v;
+$v = $m1 + $m1;
+$v = $m1 - $m1;
+no warnings;
+$v = $m1 + $m1;
+$v = $m1 - $m1;
+EXPECT
+Use of uninitialized value $m1 in addition (+) at - line 7.
+Use of uninitialized value $m1 in addition (+) at - line 7.
+Use of uninitialized value $m1 in subtraction (-) at - line 8.
+Use of uninitialized value $m1 in subtraction (-) at - line 8.
+########
+use warnings 'uninitialized';
my ($m1, $v);
our ($g1);
s//$g1/; undef $_;
s/$m1/$g1/; undef $_;
tr/x/y/; undef $_;
+tr/x/y/r; undef $_;
my $_;
/y/;
s//$g1/; undef $_;
s/$m1/$g1/; undef $_;
tr/x/y/; undef $_;
+tr/x/y/r; undef $_;
$g2 =~ /y/;
$g2 =~ /$m1/;
$g2 =~ s//$g1/; undef $g2;
$g2 =~ s/$m1/$g1/; undef $g2;
$g2 =~ tr/x/y/; undef $g2; # XXX can't extract var name yet
+$g2 =~ tr/x/y/r; undef $g2; # XXX can't extract var name yet
my $foo = "abc";
$foo =~ /$m1/;
Use of uninitialized value $_ in substitution (s///) at - line 12.
Use of uninitialized value $g1 in substitution iterator at - line 12.
Use of uninitialized value $_ in transliteration (tr///) at - line 13.
-Use of uninitialized value $_ in pattern match (m//) at - line 16.
-Use of uninitialized value $m1 in regexp compilation at - line 17.
+Use of uninitialized value $_ in transliteration (tr///) at - line 14.
Use of uninitialized value $_ in pattern match (m//) at - line 17.
-Use of uninitialized value $g1 in regexp compilation at - line 18.
+Use of uninitialized value $m1 in regexp compilation at - line 18.
Use of uninitialized value $_ in pattern match (m//) at - line 18.
-Use of uninitialized value $_ in substitution (s///) at - line 19.
-Use of uninitialized value $m1 in regexp compilation at - line 20.
-Use of uninitialized value $_ in substitution (s///) at - line 20.
+Use of uninitialized value $g1 in regexp compilation at - line 19.
+Use of uninitialized value $_ in pattern match (m//) at - line 19.
Use of uninitialized value $_ in substitution (s///) at - line 20.
+Use of uninitialized value $m1 in regexp compilation at - line 21.
Use of uninitialized value $_ in substitution (s///) at - line 21.
-Use of uninitialized value $g1 in substitution (s///) at - line 21.
Use of uninitialized value $_ in substitution (s///) at - line 21.
-Use of uninitialized value $g1 in substitution (s///) at - line 21.
-Use of uninitialized value $m1 in regexp compilation at - line 22.
Use of uninitialized value $_ in substitution (s///) at - line 22.
+Use of uninitialized value $g1 in substitution (s///) at - line 22.
Use of uninitialized value $_ in substitution (s///) at - line 22.
-Use of uninitialized value $g1 in substitution iterator at - line 22.
-Use of uninitialized value $_ in transliteration (tr///) at - line 23.
-Use of uninitialized value $g2 in pattern match (m//) at - line 25.
-Use of uninitialized value $m1 in regexp compilation at - line 26.
-Use of uninitialized value $g2 in pattern match (m//) at - line 26.
-Use of uninitialized value $g1 in regexp compilation at - line 27.
+Use of uninitialized value $g1 in substitution (s///) at - line 22.
+Use of uninitialized value $m1 in regexp compilation at - line 23.
+Use of uninitialized value $_ in substitution (s///) at - line 23.
+Use of uninitialized value $_ in substitution (s///) at - line 23.
+Use of uninitialized value $g1 in substitution iterator at - line 23.
+Use of uninitialized value $_ in transliteration (tr///) at - line 24.
+Use of uninitialized value $_ in transliteration (tr///) at - line 25.
Use of uninitialized value $g2 in pattern match (m//) at - line 27.
-Use of uninitialized value $g2 in substitution (s///) at - line 28.
-Use of uninitialized value $m1 in regexp compilation at - line 29.
-Use of uninitialized value $g2 in substitution (s///) at - line 29.
-Use of uninitialized value $g2 in substitution (s///) at - line 29.
-Use of uninitialized value $g2 in substitution (s///) at - line 30.
-Use of uninitialized value $g1 in substitution (s///) at - line 30.
+Use of uninitialized value $m1 in regexp compilation at - line 28.
+Use of uninitialized value $g2 in pattern match (m//) at - line 28.
+Use of uninitialized value $g1 in regexp compilation at - line 29.
+Use of uninitialized value $g2 in pattern match (m//) at - line 29.
Use of uninitialized value $g2 in substitution (s///) at - line 30.
-Use of uninitialized value $g1 in substitution (s///) at - line 30.
Use of uninitialized value $m1 in regexp compilation at - line 31.
Use of uninitialized value $g2 in substitution (s///) at - line 31.
Use of uninitialized value $g2 in substitution (s///) at - line 31.
-Use of uninitialized value $g1 in substitution iterator at - line 31.
-Use of uninitialized value in transliteration (tr///) at - line 32.
-Use of uninitialized value $m1 in regexp compilation at - line 35.
-Use of uninitialized value $g1 in regexp compilation at - line 36.
+Use of uninitialized value $g2 in substitution (s///) at - line 32.
+Use of uninitialized value $g1 in substitution (s///) at - line 32.
+Use of uninitialized value $g2 in substitution (s///) at - line 32.
+Use of uninitialized value $g1 in substitution (s///) at - line 32.
+Use of uninitialized value $m1 in regexp compilation at - line 33.
+Use of uninitialized value $g2 in substitution (s///) at - line 33.
+Use of uninitialized value $g2 in substitution (s///) at - line 33.
+Use of uninitialized value $g1 in substitution iterator at - line 33.
+Use of uninitialized value in transliteration (tr///) at - line 34.
+Use of uninitialized value in transliteration (tr///) at - line 35.
Use of uninitialized value $m1 in regexp compilation at - line 38.
-Use of uninitialized value $g1 in substitution (s///) at - line 39.
-Use of uninitialized value $m1 in regexp compilation at - line 40.
-Use of uninitialized value $g1 in substitution iterator at - line 40.
-Use of uninitialized value $m1 in substitution iterator at - line 41.
-Use of uninitialized value in substitution iterator at - line 44.
+Use of uninitialized value $g1 in regexp compilation at - line 39.
+Use of uninitialized value $m1 in regexp compilation at - line 41.
+Use of uninitialized value $g1 in substitution (s///) at - line 42.
+Use of uninitialized value $m1 in regexp compilation at - line 43.
+Use of uninitialized value $g1 in substitution iterator at - line 43.
+Use of uninitialized value $m1 in substitution iterator at - line 44.
+Use of uninitialized value in substitution iterator at - line 47.
########
use warnings 'uninitialized';
my ($m1);
Use of uninitialized value $m2 in substr at - line 6.
Use of uninitialized value $g1 in substr at - line 6.
Use of uninitialized value $m1 in substr at - line 6.
-Use of uninitialized value $g2 in substr at - line 7.
Use of uninitialized value $m2 in substr at - line 7.
Use of uninitialized value $g1 in substr at - line 7.
+Use of uninitialized value $g2 in substr at - line 7.
Use of uninitialized value $m1 in substr at - line 7.
Use of uninitialized value $g1 in substr at - line 8.
+Use of uninitialized value $g2 in substr at - line 8.
Use of uninitialized value $m1 in substr at - line 8.
-Use of uninitialized value in scalar assignment at - line 8.
Use of uninitialized value $m2 in substr at - line 9.
Use of uninitialized value $g1 in substr at - line 9.
+Use of uninitialized value $g2 in substr at - line 9.
Use of uninitialized value $m1 in substr at - line 9.
-Use of uninitialized value in scalar assignment at - line 9.
Use of uninitialized value $m2 in vec at - line 11.
Use of uninitialized value $g1 in vec at - line 11.
Use of uninitialized value $m1 in vec at - line 11.
Use of uninitialized value $m2 in vec at - line 12.
Use of uninitialized value $g1 in vec at - line 12.
-Use of uninitialized value $m1 in vec at - line 12.
Use of uninitialized value $m1 in index at - line 14.
Use of uninitialized value $m2 in index at - line 14.
Use of uninitialized value $g1 in index at - line 15.
my ($v);
# check hash key is sanitised
-my %h = ("\0011\002\r\n\t\f\"\\abcdefghijklmnopqrstuvwxyz", undef);
+my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef);
$v = join '', %h;
EXPECT
-Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\abcdefghijklm"...} in join or string at - line 6.
+Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6.
########
use warnings 'uninitialized';
my ($m1, $v);
Use of uninitialized value $g1 in splice at - line 10.
Use of uninitialized value in addition (+) at - line 10.
Use of uninitialized value $m1 in method lookup at - line 13.
-Use of uninitialized value in subroutine entry at - line 15.
-Use of uninitialized value in subroutine entry at - line 16.
Use of uninitialized value $m1 in warn at - line 18.
Use of uninitialized value $g1 in warn at - line 18.
foo at - line 18.
########
use warnings 'uninitialized';
my $v;
-{ my $x = -1; $v = 1 + sysseek(STDIN, $x, 0); }
+{ my $x = -1; $v = 1 + sysseek(DATA, $x, 0); }
+__END__
+EXPECT
+Use of uninitialized value in addition (+) at - line 3.
+########
+use warnings 'uninitialized';
+delete $::{'Foo::'};
+my $moo = $Foo::BAR + 42;
+__END__
EXPECT
Use of uninitialized value in addition (+) at - line 3.
+########
+use warnings 'uninitialized';
+use constant {u=>undef, v=>undef};
+sub foo () {u}
+sub foo () {v}
+EXPECT
+########
+# [perl #72090]
+use warnings 'uninitialized';
+$a = @$a > 0;
+EXPECT
+Use of uninitialized value $a in array dereference at - line 3.
+Use of uninitialized value in numeric gt (>) at - line 3.
+########
+# [perl #103766]
+use warnings 'uninitialized';
+"@{[ $x ]}";
+EXPECT
+Use of uninitialized value in join or string at - line 3.
+########
+# inside formats
+use warnings 'uninitialized';
+my $x;
+format =
+@
+"$x";
+.
+write;
+EXPECT
+Use of uninitialized value $x in string at - line 6.
+