1DAPM 4/2004. 2 3Test the appearance of variable names in "Use of uninitialized value" 4warnings. 5 6The following ops aren't tested, mainly because they do IO or non-portable 7stuff: 8 9 send recv bind conect listen accept shutdown chdir chown chroot unlink 10 chmod utime rename link symlink readlink mkdir rmdir opendir seekdir 11 system exec kill getpgrp alarm sleep dofile require gethostbyname 12 gethostbyaddr getnetbyname getnetbyaddr getprotobyname getprotobynumber 13 getservbyname getservbyport sethostent setnetent setprotoent setservent 14 getpwnam getpwuid getgrnam getgrgid waitpid setpgrp setpriority 15 getpriority syscall dbmopen ioctl fcntl truncate getsockopt setsockopt 16 semctl semop semget msgget msgctl msgsnd msgrcv shmget shmctl shmread 17 shmwrite 18 19 --------------------------------------------------- 20 21 22__END__ 23use warnings 'uninitialized'; 24my ($m1, $m2, $v); 25 26$v = $m1 + 10; 27$v = 22 + $m2; 28$v = $m1 + $m2; 29EXPECT 30Use of uninitialized value $m1 in addition (+) at - line 4. 31Use of uninitialized value $m2 in addition (+) at - line 5. 32Use of uninitialized value $m2 in addition (+) at - line 6. 33Use of uninitialized value $m1 in addition (+) at - line 6. 34######## 35use warnings 'uninitialized'; 36use utf8; 37use open qw( :utf8 :std ); 38 39$v = $à1 + 10; 40$v = 22 + $a2; 41$v = $à1 + $a2; 42EXPECT 43Use of uninitialized value $à1 in addition (+) at - line 5. 44Use of uninitialized value $a2 in addition (+) at - line 6. 45Use of uninitialized value $a2 in addition (+) at - line 7. 46Use of uninitialized value $à1 in addition (+) at - line 7. 47######## 48use warnings 'uninitialized'; 49my ($m1, $v); 50our ($g1, $g2); 51 52$v = $g1 + 21; 53$v = 31 + $g2; 54$v = $g1 + $g2; 55$v = $m1 + $g2; 56EXPECT 57Use of uninitialized value $g1 in addition (+) at - line 5. 58Use of uninitialized value $g2 in addition (+) at - line 6. 59Use of uninitialized value $g2 in addition (+) at - line 7. 60Use of uninitialized value $g1 in addition (+) at - line 7. 61Use of uninitialized value $g2 in addition (+) at - line 8. 62Use of uninitialized value $m1 in addition (+) at - line 8. 63######## 64use warnings 'uninitialized'; 65my ($m1, @ma, $v); 66 67$v = $ma[5] + 45; 68$v = 56 + $ma[6]; 69$v = $ma[7] + $m1; 70$v = $ma[8] + $ma[9]; 71$v = $ma[-1] + $ma[-2]; 72EXPECT 73Use of uninitialized value $ma[5] in addition (+) at - line 4. 74Use of uninitialized value $ma[6] in addition (+) at - line 5. 75Use of uninitialized value $m1 in addition (+) at - line 6. 76Use of uninitialized value in addition (+) at - line 6. 77Use of uninitialized value in addition (+) at - line 7. 78Use of uninitialized value in addition (+) at - line 7. 79Use of uninitialized value in addition (+) at - line 8. 80Use of uninitialized value in addition (+) at - line 8. 81######## 82use warnings 'uninitialized'; 83my ($v); 84my @mau = (undef) x 258; 85my %mhu = ('foo', undef, 'bar', undef); 86 87$v = $mau[5] + 23; 88$v = $mau[-5] + 45; 89$v = 56 + $mau[6]; 90$v = 78 + $mau[-6]; 91$v = $mau[7] + $mau[8]; 92$v = $mau[256] + $mau[257]; 93$v = $mau[-1] + $mau[-2]; 94$v = $mhu{foo} + $mhu{bar}; 95EXPECT 96Use of uninitialized value $mau[5] in addition (+) at - line 6. 97Use of uninitialized value $mau[-5] in addition (+) at - line 7. 98Use of uninitialized value $mau[6] in addition (+) at - line 8. 99Use of uninitialized value $mau[-6] in addition (+) at - line 9. 100Use of uninitialized value $mau[8] in addition (+) at - line 10. 101Use of uninitialized value $mau[7] in addition (+) at - line 10. 102Use of uninitialized value $mau[257] in addition (+) at - line 11. 103Use of uninitialized value $mau[256] in addition (+) at - line 11. 104Use of uninitialized value $mau[-2] in addition (+) at - line 12. 105Use of uninitialized value $mau[-1] in addition (+) at - line 12. 106Use of uninitialized value $mhu{"bar"} in addition (+) at - line 13. 107Use of uninitialized value $mhu{"foo"} in addition (+) at - line 13. 108######## 109use warnings 'uninitialized'; 110my ($v); 111our (@ga); 112 113$v = $ga[8] + 21; 114$v = $ga[-8] + 46; 115$v = 57 + $ga[9]; 116$v = 58 + $ga[-9]; 117$v = $ga[10] + $ga[11]; 118$v = $ga[-10] + $ga[-11]; 119EXPECT 120Use of uninitialized value $ga[8] in addition (+) at - line 5. 121Use of uninitialized value $ga[-8] in addition (+) at - line 6. 122Use of uninitialized value $ga[9] in addition (+) at - line 7. 123Use of uninitialized value $ga[-9] in addition (+) at - line 8. 124Use of uninitialized value in addition (+) at - line 9. 125Use of uninitialized value in addition (+) at - line 9. 126Use of uninitialized value in addition (+) at - line 10. 127Use of uninitialized value in addition (+) at - line 10. 128######## 129use warnings 'uninitialized'; 130my ($v); 131our @gau = (undef) x 258; 132our %ghu = ('foo', undef, 'bar', undef); 133 134$v = $gau[8] + 46; 135$v = $gau[-8] + 47; 136$v = 57 + $gau[9]; 137$v = 57 + $gau[-9]; 138$v = $gau[10] + $gau[11]; 139$v = $gau[256] + $gau[257]; 140$v = $gau[-1] + $gau[-2]; 141$v = $ghu{foo} + $ghu{bar}; 142EXPECT 143Use of uninitialized value $gau[8] in addition (+) at - line 6. 144Use of uninitialized value $gau[-8] in addition (+) at - line 7. 145Use of uninitialized value $gau[9] in addition (+) at - line 8. 146Use of uninitialized value $gau[-9] in addition (+) at - line 9. 147Use of uninitialized value $gau[11] in addition (+) at - line 10. 148Use of uninitialized value $gau[10] in addition (+) at - line 10. 149Use of uninitialized value $gau[257] in addition (+) at - line 11. 150Use of uninitialized value $gau[256] in addition (+) at - line 11. 151Use of uninitialized value $gau[-2] in addition (+) at - line 12. 152Use of uninitialized value $gau[-1] in addition (+) at - line 12. 153Use of uninitialized value $ghu{"bar"} in addition (+) at - line 13. 154Use of uninitialized value $ghu{"foo"} in addition (+) at - line 13. 155######## 156use warnings 'uninitialized'; 157my ($v); 158our @gau = (undef) x 258; 159our %ghu = ('foo', undef, 'bar', undef); 160my @mau = (undef) x 258; 161my %mhu = ('foo', undef, 'bar', undef); 162 163my $i1 = 10; 164my $i2 = 20; 165my $i3 = 2000; 166my $k1 = 'foo'; 167my $k2 = 'bar'; 168my $k3 = 'baz'; 169$v = $mau[$i1] + $mau[$i2]; 170$v = $gau[$i1] + $gau[$i2]; 171$v = $gau[$i1] + $gau[$i3]; 172$v = $mhu{$k1} + $mhu{$k2}; 173$v = $ghu{$k1} + $ghu{$k2}; 174$v = $ghu{$k1} + $ghu{$k3}; 175EXPECT 176Use of uninitialized value $mau[20] in addition (+) at - line 14. 177Use of uninitialized value $mau[10] in addition (+) at - line 14. 178Use of uninitialized value $gau[20] in addition (+) at - line 15. 179Use of uninitialized value $gau[10] in addition (+) at - line 15. 180Use of uninitialized value in addition (+) at - line 16. 181Use of uninitialized value $gau[10] in addition (+) at - line 16. 182Use of uninitialized value $mhu{"bar"} in addition (+) at - line 17. 183Use of uninitialized value $mhu{"foo"} in addition (+) at - line 17. 184Use of uninitialized value $ghu{"bar"} in addition (+) at - line 18. 185Use of uninitialized value $ghu{"foo"} in addition (+) at - line 18. 186Use of uninitialized value in addition (+) at - line 19. 187Use of uninitialized value $ghu{"foo"} in addition (+) at - line 19. 188######## 189use warnings 'uninitialized'; 190my ($m1, $m2, @ma, %mh, $v); 191our ($g1, $g2, @ga, %gh); 192 193$v = $ma[$m1]; 194$v = $ma[$g1]; 195$v = $ga[$m2]; 196$v = $ga[$g2]; 197 198$v = $mh{$m1}; 199$v = $mh{$g1}; 200$v = $gh{$m2}; 201$v = $gh{$g2}; 202 203$v = $m1+($m2-$g1); 204$v = $ma[$ga[3]]; 205$v = $ga[$ma[4]]; 206EXPECT 207Use of uninitialized value $m1 in array element at - line 5. 208Use of uninitialized value $g1 in array element at - line 6. 209Use of uninitialized value $m2 in array element at - line 7. 210Use of uninitialized value $g2 in array element at - line 8. 211Use of uninitialized value $m1 in hash element at - line 10. 212Use of uninitialized value $g1 in hash element at - line 11. 213Use of uninitialized value $m2 in hash element at - line 12. 214Use of uninitialized value $g2 in hash element at - line 13. 215Use of uninitialized value $g1 in subtraction (-) at - line 15. 216Use of uninitialized value $m2 in subtraction (-) at - line 15. 217Use of uninitialized value $m1 in addition (+) at - line 15. 218Use of uninitialized value $ga[3] in array element at - line 16. 219Use of uninitialized value $ma[4] in array element at - line 17. 220######## 221use warnings 'uninitialized'; 222my (@ma, %mh, $v); 223our (@ga, %gh); 224 225$v = sin $ga[1000]; 226$v = sin $ma[1000]; 227$v = sin $gh{foo}; 228$v = sin $mh{bar}; 229 230$v = sin $ga[$$]; 231$v = sin $ma[$$]; 232$v = sin $gh{$$}; 233$v = sin $mh{$$}; 234EXPECT 235Use of uninitialized value $ga[1000] in sin at - line 5. 236Use of uninitialized value $ma[1000] in sin at - line 6. 237Use of uninitialized value $gh{"foo"} in sin at - line 7. 238Use of uninitialized value $mh{"bar"} in sin at - line 8. 239Use of uninitialized value within @ga in sin at - line 10. 240Use of uninitialized value within @ma in sin at - line 11. 241Use of uninitialized value within %gh in sin at - line 12. 242Use of uninitialized value within %mh in sin at - line 13. 243######## 244use warnings 'uninitialized'; 245my (@mat, %mht, $v); 246sub X::TIEARRAY { bless [], 'X' } 247sub X::TIEHASH { bless [], 'X' } 248sub X::FETCH { undef } 249tie @mat, 'X'; 250tie %mht, 'X'; 251my $key1 = 'akey'; 252my $key2 = 'bkey'; 253my $index1 = 33; 254my $index2 = 55; 255 256$v = sin $mat[0]; 257$v = $mat[0] + $mat[1]; 258$v = sin $mat[1000]; 259$v = $mat[1000] + $mat[1001]; 260 261$v = sin $mat[$index1]; 262$v = $mat[$index1] + $mat[$index2]; 263 264$v = sin $mht{foo}; 265$v = $mht{foo} + $mht{bar}; 266 267$v = sin $mht{$key1}; 268$v = $mht{$key1} + $mht{$key2}; 269 270$v = $1+1; 271EXPECT 272Use of uninitialized value $mat[0] in sin at - line 13. 273Use of uninitialized value in addition (+) at - line 14. 274Use of uninitialized value in addition (+) at - line 14. 275Use of uninitialized value $mat[1000] in sin at - line 15. 276Use of uninitialized value in addition (+) at - line 16. 277Use of uninitialized value in addition (+) at - line 16. 278Use of uninitialized value within @mat in sin at - line 18. 279Use of uninitialized value in addition (+) at - line 19. 280Use of uninitialized value in addition (+) at - line 19. 281Use of uninitialized value $mht{"foo"} in sin at - line 21. 282Use of uninitialized value in addition (+) at - line 22. 283Use of uninitialized value in addition (+) at - line 22. 284Use of uninitialized value within %mht in sin at - line 24. 285Use of uninitialized value in addition (+) at - line 25. 286Use of uninitialized value in addition (+) at - line 25. 287Use of uninitialized value $1 in addition (+) at - line 27. 288######## 289use warnings 'uninitialized'; 290my ($m1); 291our ($g1, @ga); 292 293print $ga[1000]; 294print STDERR $ga[1000]; 295print STDERR $m1, $g1, $ga[1],$m2; 296print STDERR "", $ga[1],""; 297EXPECT 298Use of uninitialized value in print at - line 5. 299Use of uninitialized value in print at - line 6. 300Use of uninitialized value $m1 in print at - line 7. 301Use of uninitialized value $g1 in print at - line 7. 302Use of uninitialized value in print at - line 7. 303Use of uninitialized value $m2 in print at - line 7. 304Use of uninitialized value in print at - line 8. 305######## 306use warnings 'uninitialized'; 307my ($m1); 308our ($g1); 309 310close $m1; # exercises rv2gv 311close $g1; # exercises rv2gv 312close undef; # exercises rv2gv 313EXPECT 314Use of uninitialized value $m1 in ref-to-glob cast at - line 5. 315Use of uninitialized value $g1 in ref-to-glob cast at - line 6. 316Use of uninitialized value in ref-to-glob cast at - line 7. 317######## 318use warnings 'uninitialized'; 319my ($m1, $m2, $v); 320our ($g1, $g2); 321 322$v = $$m1; 323$v = $$g1; 324 325$v = @$m1; 326$v = @$g1; 327$v = %$m2; 328$v = %$g2; 329 330$v = ${"foo.bar"}+1; 331$v = ${"foo$m1"}+1; 332$v = ${"foo$g1"}+1; 333EXPECT 334Use of uninitialized value $m1 in scalar dereference at - line 5. 335Use of uninitialized value $g1 in scalar dereference at - line 6. 336Use of uninitialized value $m1 in array dereference at - line 8. 337Use of uninitialized value $g1 in array dereference at - line 9. 338Use of uninitialized value $m2 in hash dereference at - line 10. 339Use of uninitialized value $g2 in hash dereference at - line 11. 340Use of uninitialized value in addition (+) at - line 13. 341Use of uninitialized value $m1 in concatenation (.) or string at - line 14. 342Use of uninitialized value in addition (+) at - line 14. 343Use of uninitialized value $g1 in concatenation (.) or string at - line 15. 344Use of uninitialized value in addition (+) at - line 15. 345######## 346use warnings 'uninitialized'; 347my ($m1, $v); 348our ($g1); 349 350$v = $m1 | $m2; 351$v = $m1 & $m2; 352$v = $m1 ^ $m2; 353$v = ~$m1; 354 355$v = $g1 | $g2; 356$v = $g1 & $g2; 357$v = $g1 ^ $g2; 358$v = ~$g1; 359EXPECT 360Use of uninitialized value $m1 in bitwise or (|) at - line 5. 361Use of uninitialized value $m2 in bitwise or (|) at - line 5. 362Use of uninitialized value $m1 in bitwise and (&) at - line 6. 363Use of uninitialized value $m2 in bitwise and (&) at - line 6. 364Use of uninitialized value $m1 in bitwise xor (^) at - line 7. 365Use of uninitialized value $m2 in bitwise xor (^) at - line 7. 366Use of uninitialized value $m1 in 1's complement (~) at - line 8. 367Use of uninitialized value $g1 in bitwise or (|) at - line 10. 368Use of uninitialized value $g2 in bitwise or (|) at - line 10. 369Use of uninitialized value $g1 in bitwise and (&) at - line 11. 370Use of uninitialized value $g2 in bitwise and (&) at - line 11. 371Use of uninitialized value $g1 in bitwise xor (^) at - line 12. 372Use of uninitialized value $g2 in bitwise xor (^) at - line 12. 373Use of uninitialized value $g1 in 1's complement (~) at - line 13. 374######## 375use warnings 'uninitialized'; 376my ($v); 377 378my $tmp1; $v = $tmp1++; # (doesn't warn) 379our $tmp2; $v = $tmp2++; # (doesn't warn) 380my $tmp3; $v = ++$tmp1; # (doesn't warn) 381our $tmp4; $v = ++$tmp2; # (doesn't warn) 382 383my $tmp5; $v = $tmp5--; # (doesn't warn) 384our $tmp6; $v = $tmp6--; # (doesn't warn) 385my $tmp7; $v = --$tmp7; # (doesn't warn) 386our $tmp8; $v = --$tmp8; # (doesn't warn) 387EXPECT 388######## 389use warnings 'uninitialized'; 390 391my $s1; chomp $s1; 392my $s2; chop $s2; 393my ($s3,$s4); chomp ($s3,$s4); 394my ($s5,$s6); chop ($s5,$s6); 395EXPECT 396Use of uninitialized value $s1 in scalar chomp at - line 3. 397Use of uninitialized value $s2 in scalar chop at - line 4. 398Use of uninitialized value $s3 in chomp at - line 5. 399Use of uninitialized value $s4 in chomp at - line 5. 400Use of uninitialized value $s5 in chop at - line 6. 401Use of uninitialized value $s6 in chop at - line 6. 402######## 403use warnings 'uninitialized'; 404my ($m1); 405 406local $/ =\$m1; 407EXPECT 408Use of uninitialized value $m1 in scalar assignment at - line 4. 409Setting $/ to a reference to zero is forbidden at - line 4. 410######## 411use warnings 'uninitialized'; 412 413my $x = "abc"; 414chomp $x; chop $x; 415my $y; 416chomp ($x, $y); chop ($x, $y); 417EXPECT 418Use of uninitialized value $y in chomp at - line 6. 419Use of uninitialized value $y in chop at - line 6. 420######## 421use warnings 'uninitialized'; 422my ($m1, @ma, %mh); 423our ($g1); 424 425delete $ma[$m1]; 426delete @ma[$m1, $g1]; 427delete $mh{$m1}; 428delete @mh{$m1, $g1}; 429EXPECT 430Use of uninitialized value $m1 in delete at - line 5. 431Use of uninitialized value $m1 in delete at - line 6. 432Use of uninitialized value $g1 in delete at - line 6. 433Use of uninitialized value $m1 in delete at - line 7. 434Use of uninitialized value $m1 in delete at - line 8. 435Use of uninitialized value $g1 in delete at - line 8. 436######## 437use warnings 'uninitialized'; 438my ($m1, @ma, %mh); 439our ($g1); 440 441my @a = @ma[$m1, $g1]; 442@a = (4,5)[$m1, $g1]; 443@a = @mh{$m1, $g1}; 444EXPECT 445Use of uninitialized value $m1 in array slice at - line 5. 446Use of uninitialized value $g1 in array slice at - line 5. 447Use of uninitialized value $m1 in list slice at - line 6. 448Use of uninitialized value $g1 in list slice at - line 6. 449Use of uninitialized value $m1 in hash slice at - line 7. 450Use of uninitialized value $g1 in hash slice at - line 7. 451######## 452use warnings 'uninitialized'; 453my ($m1, @ma, %mh, $v); 454our ($g1, @ga, %gh); 455 456$v = exists $ma[$m1]; 457$v = exists $ga[$g1]; 458$v = exists $mh{$m1}; 459$v = exists $gh{$g1}; 460EXPECT 461Use of uninitialized value $m1 in exists at - line 5. 462Use of uninitialized value $g1 in exists at - line 6. 463Use of uninitialized value $m1 in exists at - line 7. 464Use of uninitialized value $g1 in exists at - line 8. 465######## 466use warnings 'uninitialized'; 467my ($m1, $m2); 468my ($v, @a); 469my ($t, $u) = (1, 1); 470 471local $.; 472 473@ma = (1 .. 2); 474@ma = ($t .. 2); 475@ma = ($m1 .. 2); 476@ma = (1 .. $u); 477@ma = (1 .. $m2); 478 479@ma = (1 ... 2); 480@ma = ($t ... 2); 481@ma = ($m1 ... 2); 482@ma = (1 ... $u); 483@ma = (1 ... $m2); 484 485$v = (1 .. 2); 486$v = ($t .. 2); 487$v = ($m1 .. 2); 488$v = (1 .. $u); 489$v = (1 .. $m2); 490 491$v = (1 ... 2); 492$v = ($t ... 2); 493$v = ($m1 ... 2); 494$v = (1 ... $u); 495$v = (1 ... $m2); 496EXPECT 497Use of uninitialized value $m1 in range (or flop) at - line 10. 498Use of uninitialized value $m2 in range (or flop) at - line 12. 499Use of uninitialized value $m1 in range (or flop) at - line 16. 500Use of uninitialized value $m2 in range (or flop) at - line 18. 501Use of uninitialized value $. in range (or flip) at - line 20. 502Use of uninitialized value $. in range (or flop) at - line 21. 503Use of uninitialized value $. in range (or flip) at - line 23. 504Use of uninitialized value $. in range (or flip) at - line 24. 505Use of uninitialized value $. in range (or flip) at - line 26. 506Use of uninitialized value $. in range (or flip) at - line 29. 507Use of uninitialized value $. in range (or flip) at - line 30. 508######## 509use warnings 'uninitialized'; 510my ($m1, $m2); 511my ($v, @a); 512my ($t, $u) = (1, 1); 513 514@ma = ($t .. $u); 515@ma = ($m1 .. $u); 516@ma = ($t .. $m2); 517@ma = ($m1 .. $m2); 518 519@ma = ($t ... $u); 520@ma = ($m1 ... $u); 521@ma = ($t ... $m2); 522@ma = ($m1 ... $m2); 523 524$v = ($t .. $u); 525$v = ($m1 .. $u); 526$v = ($t .. $m2); 527$v = ($m1 .. $m2); 528 529$v = ($t ... $u); 530$v = ($m1 ... $u); 531$v = ($t ... $m2); 532$v = ($m1 ... $m2); 533EXPECT 534Use of uninitialized value $m1 in range (or flop) at - line 7. 535Use of uninitialized value $m2 in range (or flop) at - line 8. 536Use of uninitialized value $m1 in range (or flop) at - line 9. 537Use of uninitialized value $m2 in range (or flop) at - line 9. 538Use of uninitialized value $m1 in range (or flop) at - line 12. 539Use of uninitialized value $m2 in range (or flop) at - line 13. 540Use of uninitialized value $m1 in range (or flop) at - line 14. 541Use of uninitialized value $m2 in range (or flop) at - line 14. 542######## 543use warnings 'uninitialized'; 544my ($m1, $v); 545our ($g1); 546 547my ($x1,$x2); 548$v = $x1 << $m1; 549$v = $x2 << $g1; 550EXPECT 551Use of uninitialized value $m1 in left bitshift (<<) at - line 6. 552Use of uninitialized value $x1 in left bitshift (<<) at - line 6. 553Use of uninitialized value $g1 in left bitshift (<<) at - line 7. 554Use of uninitialized value $x2 in left bitshift (<<) at - line 7. 555######## 556use warnings 'uninitialized'; 557my ($m1, $m2, $v); 558our ($g1, $g2); 559 560use integer; 561$v = $m1 + $g1; 562$v = $m1 - $g1; 563$v = $m1 * $g1; 564eval {$v = $m1 / $g1}; 565$v = $m2 / 2; 566eval {$v = $m1 % $g1}; 567$v = $m2 % 2; 568$v = $m1 < $g1; 569$v = $m1 > $g1; 570$v = $m1 <= $g1; 571$v = $m1 >= $g1; 572$v = $m1 == $g1; 573$v = $m1 != $g1; 574$v = $m1 <=> $g1; 575$v = -$m1; 576EXPECT 577Use of uninitialized value $g1 in integer addition (+) at - line 6. 578Use of uninitialized value $m1 in integer addition (+) at - line 6. 579Use of uninitialized value $g1 in integer subtraction (-) at - line 7. 580Use of uninitialized value $m1 in integer subtraction (-) at - line 7. 581Use of uninitialized value $g1 in integer multiplication (*) at - line 8. 582Use of uninitialized value $m1 in integer multiplication (*) at - line 8. 583Use of uninitialized value $g1 in integer division (/) at - line 9. 584Use of uninitialized value $m2 in integer division (/) at - line 10. 585Use of uninitialized value $g1 in integer modulus (%) at - line 11. 586Use of uninitialized value $m1 in integer modulus (%) at - line 11. 587Use of uninitialized value $m2 in integer modulus (%) at - line 12. 588Use of uninitialized value $g1 in integer lt (<) at - line 13. 589Use of uninitialized value $m1 in integer lt (<) at - line 13. 590Use of uninitialized value $g1 in integer gt (>) at - line 14. 591Use of uninitialized value $m1 in integer gt (>) at - line 14. 592Use of uninitialized value $g1 in integer le (<=) at - line 15. 593Use of uninitialized value $m1 in integer le (<=) at - line 15. 594Use of uninitialized value $g1 in integer ge (>=) at - line 16. 595Use of uninitialized value $m1 in integer ge (>=) at - line 16. 596Use of uninitialized value $g1 in integer eq (==) at - line 17. 597Use of uninitialized value $m1 in integer eq (==) at - line 17. 598Use of uninitialized value $g1 in integer ne (!=) at - line 18. 599Use of uninitialized value $m1 in integer ne (!=) at - line 18. 600Use of uninitialized value $g1 in integer comparison (<=>) at - line 19. 601Use of uninitialized value $m1 in integer comparison (<=>) at - line 19. 602Use of uninitialized value $m1 in integer negation (-) at - line 20. 603######## 604use warnings 'uninitialized'; 605my ($m1, $m2, $v); 606our ($g1, $g2); 607 608$v = int($g1); 609$v = abs($g2); 610EXPECT 611Use of uninitialized value $g1 in int at - line 5. 612Use of uninitialized value $g2 in abs at - line 6. 613######## 614use warnings 'uninitialized'; 615my ($m1, $m2, $v); 616our ($g1); 617 618$v = pack $m1; 619$v = pack "i*", $m2, $g1, $g2; 620my @unpack = unpack $m1, $m2; 621EXPECT 622Use of uninitialized value $m1 in pack at - line 5. 623Use of uninitialized value $m2 in pack at - line 6. 624Use of uninitialized value $g1 in pack at - line 6. 625Use of uninitialized value $g2 in pack at - line 6. 626Use of uninitialized value $m1 in unpack at - line 7. 627Use of uninitialized value $m2 in unpack at - line 7. 628######## 629use warnings 'uninitialized'; 630my ($m1); 631our ($g1); 632 633my @sort; 634@sort = sort $m1, $g1; 635@sort = sort {$a <=> $b} $m1, $g1; 636sub sortf {$a-1 <=> $b-1}; 637@sort = sort &sortf, $m1, $g1; 638@sort = sort { undef } 1, 2; 639sub frobnicate($$) { undef } 640@sort = sort frobnicate 1, 2; 641@sort = sort pyfg 1, 2; 642@sort = sort pyfgc 1, 2; 643no warnings; 644sub pyfg { undef } 645sub pyfgc($$) { undef } 646use warnings; 647sub dog {} 648sub dogwood($$) {} 649@sort = sort dog 1,2; 650@sort = sort dogwood 1,2; 651EXPECT 652Use of uninitialized value $m1 in sort at - line 6. 653Use of uninitialized value $g1 in sort at - line 6. 654Use of uninitialized value $m1 in sort at - line 6. 655Use of uninitialized value $g1 in sort at - line 6. 656Use of uninitialized value $m1 in sort at - line 7. 657Use of uninitialized value $g1 in sort at - line 7. 658Use of uninitialized value $g1 in sort at - line 7. 659Use of uninitialized value $m1 in sort at - line 7. 660Use of uninitialized value $a in subtraction (-) at - line 8. 661Use of uninitialized value $b in subtraction (-) at - line 8. 662Use of uninitialized value $m1 in sort at - line 9. 663Use of uninitialized value $g1 in sort at - line 9. 664Use of uninitialized value $m1 in sort at - line 9. 665Use of uninitialized value $m1 in sort at - line 9. 666Use of uninitialized value $g1 in sort at - line 9. 667Use of uninitialized value $g1 in sort at - line 9. 668Use of uninitialized value in sort at - line 10. 669Use of uninitialized value in sort at - line 12. 670Use of uninitialized value in sort at - line 13. 671Use of uninitialized value in sort at - line 14. 672Use of uninitialized value in sort at - line 21. 673Use of uninitialized value in sort at - line 22. 674######## 675use Config; 676unless ($Config{d_double_has_inf} && $Config{d_double_has_nan}) { 677 print <<EOM ; 678SKIPPED 679# No inf/nan support 680EOM 681 exit ; 682} 683my $nan = eval 'sin 9**9**9'; 684if ($nan == $nan) { 685 print <<EOM ; 686SKIPPED 687# No nan support 688EOM 689 exit ; 690} 691use warnings 'uninitialized'; 692# The optimised {$a<=>$b} case should behave the same way as unoptimised. 693@sort = sort { ($a)[0] <=> $b } 1, $nan; 694@sort = sort { $a <=> $b } 1, $nan; 695EXPECT 696Use of uninitialized value in sort at - line 19. 697Use of uninitialized value in sort at - line 20. 698######## 699use warnings 'uninitialized'; 700my ($m1, $m2, $v); 701our ($g1); 702 703eval { $v = $m1 / $g1 }; 704$v = $m2 / 2; 705eval { $v = $m1 % $g1 }; 706$v = $m2 % 2; 707$v = $m1 == $g1; 708$v = $m1 >= $g1; 709$v = $m1 > $g1; 710$v = $m1 <= $g1; 711$v = $m1 < $g1; 712$v = $m1 * $g1; 713$v = $m1 <=>$g1; 714$v = $m1 != $g1; 715$v = $m1 -$g1; 716$v = $m1 ** $g1; 717$v = $m1 + $g1; 718$v = $m1 - $g1; 719EXPECT 720Use of uninitialized value $g1 in division (/) at - line 5. 721Use of uninitialized value $m1 in division (/) at - line 5. 722Use of uninitialized value $m2 in division (/) at - line 6. 723Use of uninitialized value $g1 in modulus (%) at - line 7. 724Use of uninitialized value $m1 in modulus (%) at - line 7. 725Use of uninitialized value $m2 in modulus (%) at - line 8. 726Use of uninitialized value $g1 in numeric eq (==) at - line 9. 727Use of uninitialized value $m1 in numeric eq (==) at - line 9. 728Use of uninitialized value $g1 in numeric ge (>=) at - line 10. 729Use of uninitialized value $m1 in numeric ge (>=) at - line 10. 730Use of uninitialized value $g1 in numeric gt (>) at - line 11. 731Use of uninitialized value $m1 in numeric gt (>) at - line 11. 732Use of uninitialized value $g1 in numeric le (<=) at - line 12. 733Use of uninitialized value $m1 in numeric le (<=) at - line 12. 734Use of uninitialized value $g1 in numeric lt (<) at - line 13. 735Use of uninitialized value $m1 in numeric lt (<) at - line 13. 736Use of uninitialized value $g1 in multiplication (*) at - line 14. 737Use of uninitialized value $m1 in multiplication (*) at - line 14. 738Use of uninitialized value $g1 in numeric comparison (<=>) at - line 15. 739Use of uninitialized value $m1 in numeric comparison (<=>) at - line 15. 740Use of uninitialized value $g1 in numeric ne (!=) at - line 16. 741Use of uninitialized value $m1 in numeric ne (!=) at - line 16. 742Use of uninitialized value $g1 in subtraction (-) at - line 17. 743Use of uninitialized value $m1 in subtraction (-) at - line 17. 744Use of uninitialized value $g1 in exponentiation (**) at - line 18. 745Use of uninitialized value $m1 in exponentiation (**) at - line 18. 746Use of uninitialized value $g1 in addition (+) at - line 19. 747Use of uninitialized value $m1 in addition (+) at - line 19. 748Use of uninitialized value $g1 in subtraction (-) at - line 20. 749Use of uninitialized value $m1 in subtraction (-) at - line 20. 750######## 751use warnings 'uninitialized'; 752sub TIESCALAR{bless[]} 753sub FETCH { undef } 754 755tie my $m1, ""; 756my $v; 757$v = $m1 + $m1; 758$v = $m1 - $m1; 759no warnings; 760$v = $m1 + $m1; 761$v = $m1 - $m1; 762EXPECT 763Use of uninitialized value $m1 in addition (+) at - line 7. 764Use of uninitialized value $m1 in addition (+) at - line 7. 765Use of uninitialized value $m1 in subtraction (-) at - line 8. 766Use of uninitialized value $m1 in subtraction (-) at - line 8. 767######## 768use warnings 'uninitialized'; 769my ($m1, $v); 770our ($g1); 771 772$v = *global1{$m1}; 773$v = prototype $g1; 774$v = bless [], $g1; 775$v = `$m1`; 776 777$v = $m1 . $g1; 778EXPECT 779Use of uninitialized value $m1 in glob elem at - line 5. 780Use of uninitialized value $g1 in subroutine prototype at - line 6. 781Use of uninitialized value $g1 in bless at - line 7. 782Use of uninitialized value $m1 in quoted execution (``, qx) at - line 8. 783Use of uninitialized value $m1 in concatenation (.) or string at - line 10. 784Use of uninitialized value $g1 in concatenation (.) or string at - line 10. 785######## 786use warnings 'uninitialized'; 787my ($m1); 788our ($g1, $g2); 789 790/y/; 791/$m1/; 792/$g1/; 793 794s/y/z/; undef $_; 795s/$m1/z/; undef $_; 796s//$g1/; undef $_; 797s/$m1/$g1/; undef $_; 798tr/x/y/; undef $_; 799tr/x/y/r; undef $_; 800 801$g2 =~ /y/; 802$g2 =~ /$m1/; 803$g2 =~ /$g1/; 804$g2 =~ s/y/z/; undef $g2; 805$g2 =~ s/$m1/z/; undef $g2; 806$g2 =~ s//$g1/; undef $g2; 807$g2 =~ s/$m1/$g1/; undef $g2; 808$g2 =~ tr/x/y/; undef $g2; # XXX can't extract var name yet 809$g2 =~ tr/x/y/r; undef $g2; # XXX can't extract var name yet 810 811my $foo = "abc"; 812$foo =~ /$m1/; 813$foo =~ /$g1/; 814$foo =~ s/y/z/; 815$foo =~ s/$m1/z/; 816$foo =~ s//$g1/; 817$foo =~ s/$m1/$g1/; 818$foo =~ s/./$m1/e; 819undef $g1; 820$m1 = '$g1'; 821$foo =~ s//$m1/ee; 822undef $m1; 823$m1 =~ tr/x/y/; undef $m1; 824$m1 =~ tr/x/y/r; 825EXPECT 826Use of uninitialized value $_ in pattern match (m//) at - line 5. 827Use of uninitialized value $m1 in regexp compilation at - line 6. 828Use of uninitialized value $_ in pattern match (m//) at - line 6. 829Use of uninitialized value $g1 in regexp compilation at - line 7. 830Use of uninitialized value $_ in pattern match (m//) at - line 7. 831Use of uninitialized value $_ in substitution (s///) at - line 9. 832Use of uninitialized value $m1 in regexp compilation at - line 10. 833Use of uninitialized value $_ in substitution (s///) at - line 10. 834Use of uninitialized value $_ in substitution (s///) at - line 10. 835Use of uninitialized value $_ in substitution (s///) at - line 11. 836Use of uninitialized value $_ in substitution (s///) at - line 11. 837Use of uninitialized value $g1 in substitution iterator at - line 11. 838Use of uninitialized value $m1 in regexp compilation at - line 12. 839Use of uninitialized value $_ in substitution (s///) at - line 12. 840Use of uninitialized value $_ in substitution (s///) at - line 12. 841Use of uninitialized value $g1 in substitution iterator at - line 12. 842Use of uninitialized value $_ in transliteration (tr///) at - line 13. 843Use of uninitialized value $_ in transliteration (tr///) at - line 14. 844Use of uninitialized value $g2 in pattern match (m//) at - line 16. 845Use of uninitialized value $m1 in regexp compilation at - line 17. 846Use of uninitialized value $g2 in pattern match (m//) at - line 17. 847Use of uninitialized value $g1 in regexp compilation at - line 18. 848Use of uninitialized value $g2 in pattern match (m//) at - line 18. 849Use of uninitialized value $g2 in substitution (s///) at - line 19. 850Use of uninitialized value $m1 in regexp compilation at - line 20. 851Use of uninitialized value $g2 in substitution (s///) at - line 20. 852Use of uninitialized value $g2 in substitution (s///) at - line 20. 853Use of uninitialized value $g2 in substitution (s///) at - line 21. 854Use of uninitialized value $g2 in substitution (s///) at - line 21. 855Use of uninitialized value $g1 in substitution iterator at - line 21. 856Use of uninitialized value $m1 in regexp compilation at - line 22. 857Use of uninitialized value $g2 in substitution (s///) at - line 22. 858Use of uninitialized value $g2 in substitution (s///) at - line 22. 859Use of uninitialized value $g1 in substitution iterator at - line 22. 860Use of uninitialized value in transliteration (tr///) at - line 23. 861Use of uninitialized value in transliteration (tr///) at - line 24. 862Use of uninitialized value $m1 in regexp compilation at - line 27. 863Use of uninitialized value $g1 in regexp compilation at - line 28. 864Use of uninitialized value $m1 in regexp compilation at - line 30. 865Use of uninitialized value $g1 in substitution iterator at - line 31. 866Use of uninitialized value $m1 in regexp compilation at - line 32. 867Use of uninitialized value $g1 in substitution iterator at - line 32. 868Use of uninitialized value $m1 in substitution (s///) at - line 33. 869Use of uninitialized value in substitution iterator at - line 36. 870Use of uninitialized value $m1 in transliteration (tr///) at - line 38. 871Use of uninitialized value $m1 in transliteration (tr///) at - line 39. 872######## 873use warnings 'uninitialized'; 874my ($m1); 875 876{ my $foo = "abc"; (substr($foo,0,0)) = ($m1) } 877EXPECT 878Use of uninitialized value $m1 in list assignment at - line 4. 879######## 880use warnings 'uninitialized'; 881our ($g1); 882 883study; 884study $g1; 885EXPECT 886Use of uninitialized value $_ in study at - line 4. 887Use of uninitialized value $g1 in study at - line 5. 888######## 889use warnings 'uninitialized'; 890my ($m1); 891 892pos()=0; 893pos($m1)=0; 894EXPECT 895Use of uninitialized value $_ in scalar assignment at - line 4. 896Use of uninitialized value $m1 in scalar assignment at - line 5. 897######## 898use warnings 'uninitialized'; 899my ($m1); 900our ($g1); 901 902$v = pos($m1) + 1; 903$v = pos($g1) + 1; 904$m1 = 0; 905$g1 = ""; 906$v = pos($m1) + 1; 907$v = pos($g1) + 1; 908EXPECT 909Use of uninitialized value in addition (+) at - line 5. 910Use of uninitialized value in addition (+) at - line 6. 911Use of uninitialized value in addition (+) at - line 9. 912Use of uninitialized value in addition (+) at - line 10. 913######## 914use warnings 'uninitialized'; 915my ($m1); 916 917{ my $x = "a" x $m1 } # NB LHS of repeat does not warn 918{ my @x = ("a") x $m1 } 919EXPECT 920Use of uninitialized value $m1 in repeat (x) at - line 4. 921Use of uninitialized value $m1 in repeat (x) at - line 5. 922######## 923use warnings 'uninitialized'; 924my ($m1, $v); 925our ($g1); 926 927$v = "$m1"; 928 929$v = $m1 lt $g1; 930$v = $m1 le $g1; 931$v = $m1 gt $g1; 932$v = $m1 ge $g1; 933$v = $m1 eq $g1; 934$v = $m1 ne $g1; 935$v = $m1 cmp $g1; 936EXPECT 937Use of uninitialized value $m1 in string at - line 5. 938Use of uninitialized value $m1 in string lt at - line 7. 939Use of uninitialized value $g1 in string lt at - line 7. 940Use of uninitialized value $m1 in string le at - line 8. 941Use of uninitialized value $g1 in string le at - line 8. 942Use of uninitialized value $m1 in string gt at - line 9. 943Use of uninitialized value $g1 in string gt at - line 9. 944Use of uninitialized value $m1 in string ge at - line 10. 945Use of uninitialized value $g1 in string ge at - line 10. 946Use of uninitialized value $m1 in string eq at - line 11. 947Use of uninitialized value $g1 in string eq at - line 11. 948Use of uninitialized value $m1 in string ne at - line 12. 949Use of uninitialized value $g1 in string ne at - line 12. 950Use of uninitialized value $m1 in string comparison (cmp) at - line 13. 951Use of uninitialized value $g1 in string comparison (cmp) at - line 13. 952######## 953use warnings 'uninitialized'; 954my ($m1, $v); 955our ($g1); 956 957$v = atan2($m1,$g1); 958$v = sin $m1; 959$v = cos $m1; 960$v = rand $m1; 961$v = srand $m1; 962$v = exp $m1; 963$v = eval {log $m1}; 964$v = sqrt $m1; 965$v = hex $m1; 966$v = oct $m1; 967$v = oct; 968$v = length; # does not warn 969EXPECT 970Use of uninitialized value $g1 in atan2 at - line 5. 971Use of uninitialized value $m1 in atan2 at - line 5. 972Use of uninitialized value $m1 in sin at - line 6. 973Use of uninitialized value $m1 in cos at - line 7. 974Use of uninitialized value $m1 in rand at - line 8. 975Use of uninitialized value $m1 in srand at - line 9. 976Use of uninitialized value $m1 in exp at - line 10. 977Use of uninitialized value $m1 in log at - line 11. 978Use of uninitialized value $m1 in sqrt at - line 12. 979Use of uninitialized value $m1 in hex at - line 13. 980Use of uninitialized value $m1 in oct at - line 14. 981Use of uninitialized value $_ in oct at - line 15. 982######## 983use warnings 'uninitialized'; 984my ($m1, $v); 985our ($g1); 986 987$v = substr $m1, $g1; 988$v = substr $m1, $g1, $m2; 989$v = substr $m1, $g1, $m2, $g2; undef $m1; 990substr($m1, $g1) = $g2; undef $m1; # NB global2 991substr($m1, $g1, $m2) = $g2; undef $m1; # isn't identified 992 993$v = eval {vec ($m1, $g1, $m2)}; 994eval {vec ($m1, $g1, $m2) = $g2}; undef $m1; # ditto 995 996$v = index $m1, $m2; 997$v = index $m1, $m2, $g1; 998$v = rindex $m1, $m2; 999$v = rindex $m1, $m2, $g1; 1000EXPECT 1001Use of uninitialized value $g1 in substr at - line 5. 1002Use of uninitialized value $m1 in substr at - line 5. 1003Use of uninitialized value $m2 in substr at - line 6. 1004Use of uninitialized value $g1 in substr at - line 6. 1005Use of uninitialized value $m1 in substr at - line 6. 1006Use of uninitialized value $m2 in substr at - line 7. 1007Use of uninitialized value $g1 in substr at - line 7. 1008Use of uninitialized value $g2 in substr at - line 7. 1009Use of uninitialized value $m1 in substr at - line 7. 1010Use of uninitialized value $g1 in substr at - line 8. 1011Use of uninitialized value $g2 in substr at - line 8. 1012Use of uninitialized value $m1 in substr at - line 8. 1013Use of uninitialized value $m2 in substr at - line 9. 1014Use of uninitialized value $g1 in substr at - line 9. 1015Use of uninitialized value $g2 in substr at - line 9. 1016Use of uninitialized value $m1 in substr at - line 9. 1017Use of uninitialized value $m2 in vec at - line 11. 1018Use of uninitialized value $g1 in vec at - line 11. 1019Use of uninitialized value $m1 in vec at - line 11. 1020Use of uninitialized value $m2 in vec at - line 12. 1021Use of uninitialized value $g1 in vec at - line 12. 1022Use of uninitialized value $m1 in index at - line 14. 1023Use of uninitialized value $m2 in index at - line 14. 1024Use of uninitialized value $g1 in index at - line 15. 1025Use of uninitialized value $m1 in index at - line 15. 1026Use of uninitialized value $m2 in index at - line 15. 1027Use of uninitialized value $m1 in rindex at - line 16. 1028Use of uninitialized value $m2 in rindex at - line 16. 1029Use of uninitialized value $g1 in rindex at - line 17. 1030Use of uninitialized value $m1 in rindex at - line 17. 1031Use of uninitialized value $m2 in rindex at - line 17. 1032######## 1033use warnings 'uninitialized'; 1034my ($m1, $v); 1035our ($g1); 1036 1037$v = sprintf $m1; 1038$v = sprintf '%d%d%d%d', $m1, $m2, $g1, $g2; 1039my $m3; eval {formline $m3 }; 1040formline '@<<@<<@<<@<<', $m1, $m2, $g1, $g2; 1041EXPECT 1042Use of uninitialized value $m1 in sprintf at - line 5. 1043Use of uninitialized value $m1 in sprintf at - line 6. 1044Use of uninitialized value $m2 in sprintf at - line 6. 1045Use of uninitialized value $g1 in sprintf at - line 6. 1046Use of uninitialized value $g2 in sprintf at - line 6. 1047Use of uninitialized value $m3 in formline at - line 7. 1048Use of uninitialized value $m1 in formline at - line 8. 1049Use of uninitialized value $m2 in formline at - line 8. 1050Use of uninitialized value $g1 in formline at - line 8. 1051Use of uninitialized value $g2 in formline at - line 8. 1052######## 1053# SKIP ? !$Config{d_crypt} 1054use warnings 'uninitialized'; 1055my ($m1, $v); 1056our ($g1); 1057 1058$v = crypt $m1, $g1; 1059 1060$v = ord; 1061$v = ord $m1; 1062$v = chr; 1063$v = chr $m1; 1064 1065$v = ucfirst; 1066$v = ucfirst $m1; 1067$v = lcfirst; 1068$v = lcfirst $m1; 1069$v = uc; 1070$v = uc $m1; 1071$v = lc; 1072$v = lc $m1; 1073 1074$v = quotemeta; 1075$v = quotemeta $m1; 1076EXPECT 1077Use of uninitialized value $m1 in crypt at - line 5. 1078Use of uninitialized value $g1 in crypt at - line 5. 1079Use of uninitialized value $_ in ord at - line 7. 1080Use of uninitialized value $m1 in ord at - line 8. 1081Use of uninitialized value $_ in chr at - line 9. 1082Use of uninitialized value $m1 in chr at - line 10. 1083Use of uninitialized value $_ in ucfirst at - line 12. 1084Use of uninitialized value $m1 in ucfirst at - line 13. 1085Use of uninitialized value $_ in lcfirst at - line 14. 1086Use of uninitialized value $m1 in lcfirst at - line 15. 1087Use of uninitialized value $_ in uc at - line 16. 1088Use of uninitialized value $m1 in uc at - line 17. 1089Use of uninitialized value $_ in lc at - line 18. 1090Use of uninitialized value $m1 in lc at - line 19. 1091Use of uninitialized value $_ in quotemeta at - line 21. 1092Use of uninitialized value $m1 in quotemeta at - line 22. 1093######## 1094use warnings 'uninitialized'; 1095my ($m1, $v1, $v2, $v3, $v4); 1096our ($g1); 1097 1098($v1,$v2,$v3,$v4) = split; 1099($v1,$v2,$v3,$v4) = split $m1; 1100($v1,$v2,$v3,$v4) = split $m1, $m2; 1101($v1,$v2,$v3,$v4) = split $m1, $m2, $g1; 1102 1103$v1 = join $m1; 1104$v2 = join $m1, $m2; 1105$v3 = join $m1, $m2, $m3; 1106EXPECT 1107Use of uninitialized value $_ in split at - line 5. 1108Use of uninitialized value $m1 in regexp compilation at - line 6. 1109Use of uninitialized value $_ in split at - line 6. 1110Use of uninitialized value $m1 in regexp compilation at - line 7. 1111Use of uninitialized value $m2 in split at - line 7. 1112Use of uninitialized value $m1 in regexp compilation at - line 8. 1113Use of uninitialized value $g1 in split at - line 8. 1114Use of uninitialized value $m2 in split at - line 8. 1115Use of uninitialized value $m1 in join or string at - line 10. 1116Use of uninitialized value $m2 in join or string at - line 11. 1117Use of uninitialized value $m1 in join or string at - line 12. 1118Use of uninitialized value $m2 in join or string at - line 12. 1119Use of uninitialized value $m3 in join or string at - line 12. 1120######## 1121use warnings 'uninitialized'; 1122my ($m1, $m2, @ma, $v); 1123 1124our @foo1=(1,undef); chomp @foo1; 1125my @foo2=(1,undef); chomp @foo2; 1126our @foo3=(1,undef); chop @foo3; 1127my @foo4=(1,undef); chop @foo4; 1128our @foo5=(1,undef); $v = sprintf "%s%s",@foo5; 1129my @foo6=(1,undef); $v = sprintf "%s%s",@foo6; 1130our %foo7=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo7; 1131my %foo8=('foo'=>'bar','baz'=>undef); $v = sprintf "%s%s%s%s",%foo8; 1132our @foo9 =(1,undef); $v = sprintf "%s%s%s%s",$m1,@foo9, $ma[2]; 1133my @foo10=(1,undef); $v = sprintf "%s%s%s%s",$m2,@foo10,$ma[2]; 1134our %foo11=('foo'=>'bar','baz'=>undef); $v = join '', %foo11; 1135my %foo12=('foo'=>'bar','baz'=>undef); $v = join '', %foo12; 1136our %foo13=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo13; 1137my %foo14=(1..2000,'foo'=>'bar','baz'=>undef); $v = join '', %foo14; 1138EXPECT 1139Use of uninitialized value $foo1[1] in chomp at - line 4. 1140Use of uninitialized value $foo2[1] in chomp at - line 5. 1141Use of uninitialized value $foo3[1] in chop at - line 6. 1142Use of uninitialized value $foo4[1] in chop at - line 7. 1143Use of uninitialized value $foo5[1] in sprintf at - line 8. 1144Use of uninitialized value $foo6[1] in sprintf at - line 9. 1145Use of uninitialized value $foo7{"baz"} in sprintf at - line 10. 1146Use of uninitialized value $foo8{"baz"} in sprintf at - line 11. 1147Use of uninitialized value $m1 in sprintf at - line 12. 1148Use of uninitialized value $foo9[1] in sprintf at - line 12. 1149Use of uninitialized value in sprintf at - line 12. 1150Use of uninitialized value $m2 in sprintf at - line 13. 1151Use of uninitialized value $foo10[1] in sprintf at - line 13. 1152Use of uninitialized value in sprintf at - line 13. 1153Use of uninitialized value $foo11{"baz"} in join or string at - line 14. 1154Use of uninitialized value $foo12{"baz"} in join or string at - line 15. 1155Use of uninitialized value within %foo13 in join or string at - line 16. 1156Use of uninitialized value within %foo14 in join or string at - line 17. 1157######## 1158use warnings 'uninitialized'; 1159my ($v); 1160 1161undef $^A; $v = $^A + ${^FOO}; # should output '^A' not chr(1) 1162*GLOB1 = *GLOB2; 1163$v = $GLOB1 + 1; 1164$v = $GLOB2 + 1; 1165EXPECT 1166Use of uninitialized value $^FOO in addition (+) at - line 4. 1167Use of uninitialized value $^A in addition (+) at - line 4. 1168Use of uninitialized value $GLOB1 in addition (+) at - line 6. 1169Use of uninitialized value $GLOB2 in addition (+) at - line 7. 1170######## 1171use warnings 'uninitialized'; 1172my ($v); 1173 1174# check hash key is sanitised 1175my %h = ("\0011\002\r\n\t\f\"\\\x{1234}abcdefghijklmnopqrstuvwxyz", undef); 1176$v = join '', %h; 1177EXPECT 1178Use of uninitialized value $h{"\0011\2\r\n\t\f\"\\\x{1234}abcde"...} in join or string at - line 6. 1179######## 1180use warnings 'uninitialized'; 1181my ($m1, $v); 1182our ($g1); 1183 1184$v = eval { \&$m1 }; 1185$v = eval { \&$g1 }; 1186 1187my @a; 1188@a = splice @a, $m1, $g1; 1189$v = 1 + splice @a, $m1, $g1; 1190 1191my $x = bless [], 'Z'; 1192eval { $x->$m1() }; 1193 1194eval { &$m1() }; 1195eval { &$g1() }; 1196 1197warn $m1,$g1,"foo"; 1198 1199eval { die $m1, $g1 }; 1200 1201reset $m1; 1202reset $g1; 1203EXPECT 1204Use of uninitialized value $m1 in subroutine dereference at - line 5. 1205Use of uninitialized value $g1 in subroutine dereference at - line 6. 1206Use of uninitialized value $m1 in splice at - line 9. 1207Use of uninitialized value $g1 in splice at - line 9. 1208Use of uninitialized value $m1 in splice at - line 10. 1209Use of uninitialized value $g1 in splice at - line 10. 1210Use of uninitialized value in addition (+) at - line 10. 1211Use of uninitialized value $m1 in method lookup at - line 13. 1212Use of uninitialized value $m1 in warn at - line 18. 1213Use of uninitialized value $g1 in warn at - line 18. 1214foo at - line 18. 1215Use of uninitialized value $m1 in die at - line 20. 1216Use of uninitialized value $g1 in die at - line 20. 1217Use of uninitialized value $m1 in symbol reset at - line 22. 1218Use of uninitialized value $g1 in symbol reset at - line 23. 1219######## 1220use warnings 'uninitialized'; 1221my ($m1); 1222our ($g1); 1223 1224open FOO; # accesses $FOO 1225my $foo = 'FO'; 1226open($foo."O"); # accesses $FOO 1227open my $x; # accesses ${*$x} 1228open $foobar; # accesses ${*$foobar} 1229my $y; 1230open $y, $m1; 1231eval { open $y, $m1, $g1 }; 1232open $y, '<', $g1; 1233 1234sysopen $y, $m1, $m2; 1235sysopen $y, $m1, $g1, $m2; 1236 1237my $old = umask; 1238umask $m1; 1239umask $g1; 1240umask $old; 1241 1242binmode STDIN, $m1; 1243EXPECT 1244Use of uninitialized value $FOO in open at - line 5. 1245Use of uninitialized value in open at - line 7. 1246Use of uninitialized value in open at - line 8. 1247Use of uninitialized value in open at - line 9. 1248Use of uninitialized value $m1 in open at - line 11. 1249Use of uninitialized value $m1 in open at - line 12. 1250Use of uninitialized value $g1 in open at - line 13. 1251Use of uninitialized value $m2 in sysopen at - line 15. 1252Use of uninitialized value $m1 in sysopen at - line 15. 1253Use of uninitialized value $m2 in sysopen at - line 16. 1254Use of uninitialized value $g1 in sysopen at - line 16. 1255Use of uninitialized value $m1 in sysopen at - line 16. 1256Use of uninitialized value $m1 in umask at - line 19. 1257Use of uninitialized value $g1 in umask at - line 20. 1258Use of uninitialized value $m1 in binmode at - line 23. 1259######## 1260use warnings 'uninitialized'; 1261my ($m1); 1262our ($g1); 1263 1264eval { my $x; tie $x, $m1 }; 1265 1266eval { my $x; read $m1, $x, $g1 }; 1267eval { my $x; read $m1, $x, $g1, $g2 }; 1268eval { my $x; sysread $m1, $x, $g1 }; 1269eval { my $x; sysread $m1, $x, $g1, $g2 }; 1270EXPECT 1271Use of uninitialized value $m1 in tie at - line 5. 1272Use of uninitialized value $m1 in ref-to-glob cast at - line 7. 1273Use of uninitialized value $g1 in read at - line 7. 1274Use of uninitialized value $m1 in ref-to-glob cast at - line 8. 1275Use of uninitialized value $g1 in read at - line 8. 1276Use of uninitialized value $g2 in read at - line 8. 1277Use of uninitialized value $m1 in ref-to-glob cast at - line 9. 1278Use of uninitialized value $g1 in sysread at - line 9. 1279Use of uninitialized value $m1 in ref-to-glob cast at - line 10. 1280Use of uninitialized value $g1 in sysread at - line 10. 1281Use of uninitialized value $g2 in sysread at - line 10. 1282######## 1283use warnings 'uninitialized'; 1284my ($m1); 1285our ($g1, @ga); 1286 1287printf $m1; 1288printf STDERR "%d%d%d%d\n", $m1, $m2, $g1, $g2; 1289printf $ga[1000]; 1290printf STDERR "FOO1:%s\n", $ga[1000]; 1291printf STDERR "FOO2:%s%s%s%s\n", $m1, $g1, $ga[1],$m2; 1292printf STDERR "FOO3:%s%s%s\n", "X", $ga[1],"Y"; 1293EXPECT 1294Use of uninitialized value $m1 in printf at - line 5. 1295Use of uninitialized value $m1 in printf at - line 6. 1296Use of uninitialized value $m2 in printf at - line 6. 1297Use of uninitialized value $g1 in printf at - line 6. 1298Use of uninitialized value $g2 in printf at - line 6. 12990000 1300Use of uninitialized value in printf at - line 7. 1301Use of uninitialized value in printf at - line 8. 1302FOO1: 1303Use of uninitialized value $m1 in printf at - line 9. 1304Use of uninitialized value $g1 in printf at - line 9. 1305Use of uninitialized value in printf at - line 9. 1306Use of uninitialized value $m2 in printf at - line 9. 1307FOO2: 1308Use of uninitialized value in printf at - line 10. 1309FOO3:XY 1310######## 1311use warnings 'uninitialized'; 1312my ($m1); 1313our ($g1); 1314 1315eval { my $x; seek $x,$m1, $g1 }; 1316eval { my $x; sysseek $x,$m1, $g1 }; 1317eval { syswrite $m1, $g1 }; # logic changed - now won't try $g1 if $m1 is bad 1318# eval { syswrite STDERR, $m1 }; # XXX under utf8, can give 1319# eval { syswrite STDERR, $m1, $g1 }; # XXX different warnings 1320# eval { syswrite STDERR, $m1, $g1, $m2 }; 1321eval { my $x; socket $x, $m1, $g1, $m2 }; 1322eval { my ($x,$y); socketpair $x, $y, $m1, $g1, $m2 }; 1323EXPECT 1324Use of uninitialized value $x in ref-to-glob cast at - line 5. 1325Use of uninitialized value $g1 in seek at - line 5. 1326Use of uninitialized value $m1 in seek at - line 5. 1327Use of uninitialized value $x in ref-to-glob cast at - line 6. 1328Use of uninitialized value $g1 in sysseek at - line 6. 1329Use of uninitialized value $m1 in sysseek at - line 6. 1330Use of uninitialized value $m1 in ref-to-glob cast at - line 7. 1331Use of uninitialized value $m2 in socket at - line 11. 1332Use of uninitialized value $g1 in socket at - line 11. 1333Use of uninitialized value $m1 in socket at - line 11. 1334Use of uninitialized value $m2 in socketpair at - line 12. 1335Use of uninitialized value $g1 in socketpair at - line 12. 1336Use of uninitialized value $m1 in socketpair at - line 12. 1337######## 1338use Config; 1339BEGIN { 1340 if ( !$Config{d_flock} && 1341 !$Config{d_fcntl_can_lock} && 1342 !$Config{d_lockf} ) { 1343 print <<EOM ; 1344SKIPPED 1345# flock not present 1346EOM 1347 exit ; 1348 } 1349} 1350use warnings 'uninitialized'; 1351our ($g1); 1352 1353eval { my $x; flock $x, $g1 }; 1354EXPECT 1355Use of uninitialized value $x in ref-to-glob cast at - line 16. 1356Use of uninitialized value $g1 in flock at - line 16. 1357######## 1358use warnings 'uninitialized'; 1359my ($m1, $v); 1360our ($g1); 1361 1362stat; 1363lstat; 1364stat $m1; 1365lstat $g1; 1366 1367$v = -R $m1; 1368$v = -W $m1; 1369$v = -X $m1; 1370$v = -r $m1; 1371$v = -w $m1; 1372$v = -x $m1; 1373$v = -e $m1; 1374$v = -o $m1; 1375$v = -O $m1; 1376$v = -z $m1; 1377$v = -s $m1; 1378$v = -M $m1; 1379$v = -A $m1; 1380$v = -C $m1; 1381$v = -S $m1; 1382$v = -c $m1; 1383$v = -b $m1; 1384$v = -f $m1; 1385$v = -d $m1; 1386$v = -p $m1; 1387$v = -l $m1; 1388$v = -u $m1; 1389$v = -g $m1; 1390# $v = -k $m1; # XXX this is a no-op under win32 1391$v = -t $m1; 1392$v = -T $m1; 1393$v = -B $m1; 1394EXPECT 1395Use of uninitialized value $_ in stat at - line 5. 1396Use of uninitialized value $_ in lstat at - line 6. 1397Use of uninitialized value $m1 in stat at - line 7. 1398Use of uninitialized value $g1 in lstat at - line 8. 1399Use of uninitialized value $m1 in -R at - line 10. 1400Use of uninitialized value $m1 in -W at - line 11. 1401Use of uninitialized value $m1 in -X at - line 12. 1402Use of uninitialized value $m1 in -r at - line 13. 1403Use of uninitialized value $m1 in -w at - line 14. 1404Use of uninitialized value $m1 in -x at - line 15. 1405Use of uninitialized value $m1 in -e at - line 16. 1406Use of uninitialized value $m1 in -o at - line 17. 1407Use of uninitialized value $m1 in -O at - line 18. 1408Use of uninitialized value $m1 in -z at - line 19. 1409Use of uninitialized value $m1 in -s at - line 20. 1410Use of uninitialized value $m1 in -M at - line 21. 1411Use of uninitialized value $m1 in -A at - line 22. 1412Use of uninitialized value $m1 in -C at - line 23. 1413Use of uninitialized value $m1 in -S at - line 24. 1414Use of uninitialized value $m1 in -c at - line 25. 1415Use of uninitialized value $m1 in -b at - line 26. 1416Use of uninitialized value $m1 in -f at - line 27. 1417Use of uninitialized value $m1 in -d at - line 28. 1418Use of uninitialized value $m1 in -p at - line 29. 1419Use of uninitialized value $m1 in -l at - line 30. 1420Use of uninitialized value $m1 in -u at - line 31. 1421Use of uninitialized value $m1 in -g at - line 32. 1422Use of uninitialized value $m1 in -t at - line 34. 1423Use of uninitialized value $m1 in -T at - line 35. 1424Use of uninitialized value $m1 in -B at - line 36. 1425######## 1426use warnings 'uninitialized'; 1427my ($m1, $v); 1428our ($g1); 1429 1430$v = localtime $m1; 1431$v = gmtime $g1; 1432EXPECT 1433Use of uninitialized value $m1 in localtime at - line 5. 1434Use of uninitialized value $g1 in gmtime at - line 6. 1435######## 1436use warnings 'uninitialized'; 1437my ($m1, $m2, $v); 1438 1439$v = eval; 1440$v = eval $m1; 1441$m2 = q($m1); $v = 1 + eval $m2; 1442EXPECT 1443Use of uninitialized value $_ in eval "string" at - line 4. 1444Use of uninitialized value $m1 in eval "string" at - line 5. 1445Use of uninitialized value in addition (+) at - line 6. 1446######## 1447use warnings 'uninitialized'; 1448my ($m1); 1449 1450exit $m1; 1451EXPECT 1452Use of uninitialized value $m1 in exit at - line 4. 1453######## 1454use warnings 'uninitialized'; 1455my $undef; 1456 1457if ($undef == 3) { 1458} elsif ($undef == 0) { 1459} 1460EXPECT 1461Use of uninitialized value $undef in numeric eq (==) at - line 4. 1462Use of uninitialized value $undef in numeric eq (==) at - line 5. 1463######## 1464# TODO long standing bug - conditions of while loops 1465use warnings; 1466 1467my $c; 1468my $d = 1; 1469while ($c == 0 && $d) { 1470 # a 1471 # few 1472 # blank 1473 # lines 1474 undef $d; 1475} 1476EXPECT 1477Use of uninitialized value $c in numeric eq (==) at - line 5. 1478Use of uninitialized value $c in numeric eq (==) at - line 5. 1479######## 1480# TODO long standing bug - conditions of until loops 1481use warnings; 1482 1483my $c; 1484my $d; 1485until ($c == 1) { 1486 # a 1487 # few 1488 # blank 1489 # lines 1490 $c = 1 if ++$d == 2; 1491} 1492EXPECT 1493Use of uninitialized value $c in numeric eq (==) at - line 5. 1494Use of uninitialized value $c in numeric eq (==) at - line 5. 1495######## 1496# TODO long standing bug - conditions of for loops 1497use warnings; 1498 1499my $c; 1500my $d; 1501for ($d = 1; $c == 0 && $d; ) { 1502 # a 1503 # few 1504 # blank 1505 # lines 1506 undef $d; 1507} 1508 1509my $e; 1510for ($d = 2; $d > 0; $e = !($c == 0)) { 1511 # a 1512 # few 1513 # blank 1514 # lines 1515 --$d; 1516} 1517EXPECT 1518Use of uninitialized value $c in numeric eq (==) at - line 5. 1519Use of uninitialized value $c in numeric eq (==) at - line 5. 1520Use of uninitialized value $c in numeric eq (==) at - line 14. 1521Use of uninitialized value $c in numeric eq (==) at - line 14. 1522######## 1523# TODO long standing bug - more general variant of the above problem 1524use warnings; 1525my $undef; 1526 1527my $a = $undef + 1; 1528my $b 1529 = $undef 1530 + 1; 1531EXPECT 1532Use of uninitialized value $undef in addition (+) at - line 4. 1533Use of uninitialized value $undef in addition (+) at - line 7. 1534######## 1535use warnings 'uninitialized'; 1536my ($r1, $r2); 1537$_ = undef; 1538$v = reverse; 1539$v = reverse $r1; 1540$v = reverse "abc", $r2, "def"; 1541EXPECT 1542Use of uninitialized value in reverse at - line 4. 1543Use of uninitialized value $r1 in reverse at - line 5. 1544Use of uninitialized value $r2 in reverse at - line 6. 1545######## 1546use warnings 'uninitialized'; 1547# 1548# ops that can return undef for defined args 1549# split into separate tests to diagnose the cause of daily build smoke 1550# 1551# *** `` not tested: Windows produces an error on STDERR 1552# *** ditto qx() 1553# *** pipe() not tested 1554# *** ioctl not tested 1555# *** socket not tested 1556# *** socketpair not tested 1557# *** bind not tested 1558# *** connect not tested 1559# *** listen not tested 1560# *** shutdown not tested 1561# *** setsockopt not tested 1562# *** getpeername not tested 1563# *** readdir not tested 1564# *** telldir not tested 1565# *** seekdir not tested 1566# *** rewinddir not tested 1567# *** closedir not tested 1568# *** gmtime not tested 1569# *** alarm not tested 1570# *** semget not tested 1571# *** getlogin not tested 1572EXPECT 1573######## 1574use warnings 'uninitialized'; 1575if ($^O eq 'MSWin32') { 1576 print <<'EOM'; 1577SKIPPED 1578# `` produces an error on STDERR on Win32 1579EOM 1580 exit; 1581} 1582my $nocmd = '/no/such/command'; 1583my $v; 1584$v = 1 + `$nocmd`; 1585EXPECT 1586Use of uninitialized value in addition (+) at - line 11. 1587######## 1588use warnings 'uninitialized'; 1589if ($^O eq 'MSWin32') { 1590 print <<'EOM'; 1591SKIPPED 1592# qx produces an error on STDERR on Win32 1593EOM 1594 exit; 1595} 1596my $nocmd = '/no/such/command'; 1597my $v; 1598$v = 1 + qx($nocmd); 1599EXPECT 1600Use of uninitialized value in addition (+) at - line 11. 1601######## 1602use warnings 'uninitialized'; 1603my $nan = "NaN"; 1604if ($nan == $nan) { 1605 print <<'EOM'; 1606SKIPPED 1607# NaN not supported here. 1608EOM 1609 exit; 1610} 1611my $v; 1612$v = 1 + ($nan <=> 1); 1613EXPECT 1614Use of uninitialized value in addition (+) at - line 11. 1615######## 1616use warnings 'uninitialized'; 1617if ($^O eq 'MSWin32') { 1618 print <<'EOM'; 1619SKIPPED 1620# -k produces no warning on Win32 1621EOM 1622 exit; 1623} 1624my $nofile = '/no/such/file'; 1625my $v; 1626$v = 1 + -k $nofile; 1627EXPECT 1628Use of uninitialized value in addition (+) at - line 11. 1629######## 1630use warnings 'uninitialized'; 1631my $nofile = '/no/such/file'; 1632my $v; 1633my $f = ""; 1634$v = 1 + open($f, $nofile); 1635EXPECT 1636Use of uninitialized value in addition (+) at - line 5. 1637######## 1638use warnings 'uninitialized'; 1639my $nofile = '/no/such/file'; 1640my $v; 1641$v = 1 + fileno($nofile); 1642EXPECT 1643Use of uninitialized value in addition (+) at - line 4. 1644######## 1645use warnings 'uninitialized'; 1646my $nofile = '/no/such/file'; 1647my $v; 1648$v = 1 + binmode($nofile); 1649EXPECT 1650Use of uninitialized value in addition (+) at - line 4. 1651######## 1652use warnings 'uninitialized'; 1653my $nofile = '/no/such/file'; 1654my $v; 1655$v = 1 + tied($nofile); 1656EXPECT 1657Use of uninitialized value in addition (+) at - line 4. 1658######## 1659use warnings 'uninitialized'; 1660my $nofile = '/no/such/file'; 1661my $v; 1662$v = 1 + getc($nofile); 1663EXPECT 1664Use of uninitialized value in addition (+) at - line 4. 1665######## 1666use warnings 'uninitialized'; 1667my $nofile = '/no/such/file'; 1668my $v; 1669$v = 1 + sysread($nofile, my $buf,1); 1670EXPECT 1671Use of uninitialized value in addition (+) at - line 4. 1672######## 1673use warnings 'uninitialized'; 1674my $nofile = '/no/such/file'; 1675my $v; 1676$v = 1 + eval { send($nofile, $buf,0) }; 1677EXPECT 1678Use of uninitialized value in addition (+) at - line 4. 1679######## 1680use warnings 'uninitialized'; 1681my $nofile = '/no/such/file'; 1682my $v; 1683my $fh = ""; 1684$v = 1 + eval { accept($fh, $nofile) }; 1685EXPECT 1686Use of uninitialized value in addition (+) at - line 5. 1687######## 1688use warnings 'uninitialized'; 1689my $nofile = '/no/such/file'; 1690my $v; 1691$v = 1 + (-r $nofile); 1692EXPECT 1693Use of uninitialized value in addition (+) at - line 4. 1694######## 1695use warnings 'uninitialized'; 1696my $nofile = '/no/such/file'; 1697my $v; 1698$v = 1 + (-w $nofile); 1699EXPECT 1700Use of uninitialized value in addition (+) at - line 4. 1701######## 1702use warnings 'uninitialized'; 1703my $nofile = '/no/such/file'; 1704my $v; 1705$v = 1 + (-x $nofile); 1706EXPECT 1707Use of uninitialized value in addition (+) at - line 4. 1708######## 1709use warnings 'uninitialized'; 1710my $nofile = '/no/such/file'; 1711my $v; 1712$v = 1 + (-o $nofile); 1713EXPECT 1714Use of uninitialized value in addition (+) at - line 4. 1715######## 1716use warnings 'uninitialized'; 1717my $nofile = '/no/such/file'; 1718my $v; 1719$v = 1 + (-R $nofile); 1720EXPECT 1721Use of uninitialized value in addition (+) at - line 4. 1722######## 1723use warnings 'uninitialized'; 1724my $nofile = '/no/such/file'; 1725my $v; 1726$v = 1 + (-W $nofile); 1727EXPECT 1728Use of uninitialized value in addition (+) at - line 4. 1729######## 1730use warnings 'uninitialized'; 1731my $nofile = '/no/such/file'; 1732my $v; 1733$v = 1 + (-X $nofile); 1734EXPECT 1735Use of uninitialized value in addition (+) at - line 4. 1736######## 1737use warnings 'uninitialized'; 1738my $nofile = '/no/such/file'; 1739my $v; 1740$v = 1 + (-O $nofile); 1741EXPECT 1742Use of uninitialized value in addition (+) at - line 4. 1743######## 1744use warnings 'uninitialized'; 1745my $nofile = '/no/such/file'; 1746my $v; 1747$v = 1 + (-e $nofile); 1748EXPECT 1749Use of uninitialized value in addition (+) at - line 4. 1750######## 1751use warnings 'uninitialized'; 1752my $nofile = '/no/such/file'; 1753my $v; 1754$v = 1 + (-z $nofile); 1755EXPECT 1756Use of uninitialized value in addition (+) at - line 4. 1757######## 1758use warnings 'uninitialized'; 1759my $nofile = '/no/such/file'; 1760my $v; 1761$v = 1 + (-s $nofile); 1762EXPECT 1763Use of uninitialized value in addition (+) at - line 4. 1764######## 1765use warnings 'uninitialized'; 1766my $nofile = '/no/such/file'; 1767my $v; 1768$v = 1 + (-f $nofile); 1769EXPECT 1770Use of uninitialized value in addition (+) at - line 4. 1771######## 1772use warnings 'uninitialized'; 1773my $nofile = '/no/such/file'; 1774my $v; 1775$v = 1 + (-d $nofile); 1776EXPECT 1777Use of uninitialized value in addition (+) at - line 4. 1778######## 1779use warnings 'uninitialized'; 1780my $nofile = '/no/such/file'; 1781my $v; 1782$v = 1 + (-l $nofile); 1783EXPECT 1784Use of uninitialized value in addition (+) at - line 4. 1785######## 1786use warnings 'uninitialized'; 1787my $nofile = '/no/such/file'; 1788my $v; 1789$v = 1 + (-p $nofile); 1790EXPECT 1791Use of uninitialized value in addition (+) at - line 4. 1792######## 1793use warnings 'uninitialized'; 1794my $nofile = '/no/such/file'; 1795my $v; 1796$v = 1 + (-S $nofile); 1797EXPECT 1798Use of uninitialized value in addition (+) at - line 4. 1799######## 1800use warnings 'uninitialized'; 1801my $nofile = '/no/such/file'; 1802my $v; 1803$v = 1 + (-b $nofile); 1804EXPECT 1805Use of uninitialized value in addition (+) at - line 4. 1806######## 1807use warnings 'uninitialized'; 1808my $nofile = '/no/such/file'; 1809my $v; 1810$v = 1 + (-c $nofile); 1811EXPECT 1812Use of uninitialized value in addition (+) at - line 4. 1813######## 1814use warnings 'uninitialized'; 1815my $nofile = '/no/such/file'; 1816my $v; 1817$v = 1 + (-t $nofile); 1818EXPECT 1819Use of uninitialized value in addition (+) at - line 4. 1820######## 1821use warnings 'uninitialized'; 1822my $nofile = '/no/such/file'; 1823my $v; 1824$v = 1 + (-u $nofile); 1825EXPECT 1826Use of uninitialized value in addition (+) at - line 4. 1827######## 1828use warnings 'uninitialized'; 1829my $nofile = '/no/such/file'; 1830my $v; 1831$v = 1 + (-g $nofile); 1832EXPECT 1833Use of uninitialized value in addition (+) at - line 4. 1834######## 1835use warnings 'uninitialized'; 1836my $nofile = '/no/such/file'; 1837my $v; 1838$v = 1 + (-T $nofile); 1839EXPECT 1840Use of uninitialized value in addition (+) at - line 4. 1841######## 1842use warnings 'uninitialized'; 1843my $nofile = '/no/such/file'; 1844my $v; 1845$v = 1 + (-B $nofile); 1846EXPECT 1847Use of uninitialized value in addition (+) at - line 4. 1848######## 1849use warnings 'uninitialized'; 1850my $nofile = '/no/such/file'; 1851my $v; 1852$v = 1 + (-M $nofile); 1853EXPECT 1854Use of uninitialized value in addition (+) at - line 4. 1855######## 1856use warnings 'uninitialized'; 1857my $nofile = '/no/such/file'; 1858my $v; 1859$v = 1 + (-A $nofile); 1860EXPECT 1861Use of uninitialized value in addition (+) at - line 4. 1862######## 1863use warnings 'uninitialized'; 1864my $nofile = '/no/such/file'; 1865my $v; 1866$v = 1 + (-C $nofile); 1867EXPECT 1868Use of uninitialized value in addition (+) at - line 4. 1869######## 1870use warnings 'uninitialized'; 1871my $nofile = '/no/such/file'; 1872my $v; 1873$v = 1 + eval { readlink $nofile }; 1874EXPECT 1875Use of uninitialized value in addition (+) at - line 4. 1876######## 1877use warnings 'uninitialized'; 1878my $nofile = '/no/such/file'; 1879my $v; 1880$v = 1 + opendir($f, $nofile); 1881EXPECT 1882Use of uninitialized value in addition (+) at - line 4. 1883######## 1884use warnings 'uninitialized'; 1885my $nofile = '/no/such/file'; 1886my $v; 1887$v = 1 + undef; 1888EXPECT 1889Use of uninitialized value in addition (+) at - line 4. 1890######## 1891use warnings 'uninitialized'; 1892my $nofile = '/no/such/file'; 1893my $v; 1894my $x = 1; $v = 1 + undef($x); 1895EXPECT 1896Use of uninitialized value in addition (+) at - line 4. 1897######## 1898use warnings 'uninitialized'; 1899my $v; 1900my $emptys = ""; 1901$v = 1 + substr($emptys,2,1); 1902EXPECT 1903Use of uninitialized value in addition (+) at - line 4. 1904######## 1905use warnings 'uninitialized'; 1906my $v; 1907my @emptya; 1908$v = 1 + each @emptya; 1909EXPECT 1910Use of uninitialized value in addition (+) at - line 4. 1911######## 1912use warnings 'uninitialized'; 1913my $v; 1914my %emptyh; 1915$v = 1 + each %emptyh; 1916EXPECT 1917Use of uninitialized value in addition (+) at - line 4. 1918######## 1919use warnings 'uninitialized'; 1920my $v; 1921my @emptya; 1922$v = 1 + sort @emptya; 1923EXPECT 1924Use of uninitialized value in addition (+) at - line 4. 1925######## 1926use warnings 'uninitialized'; 1927my $v; 1928my $zero = 0; $v = 1 + caller($zero); 1929EXPECT 1930Use of uninitialized value in addition (+) at - line 3. 1931######## 1932use warnings 'uninitialized'; 1933my $nofile = '/no/such/file'; 1934my $v; 1935$v = 1 + do $nofile; 1936EXPECT 1937Use of uninitialized value in addition (+) at - line 4. 1938######## 1939use warnings 'uninitialized'; 1940my $v; 1941my $fn = sub {}; 1942$v = 1 + prototype $fn; 1943EXPECT 1944Use of uninitialized value in addition (+) at - line 4. 1945######## 1946use warnings 'uninitialized'; no warnings 'experimental::smartmatch'; 1947my $v; 1948my $fn = sub {}; 1949$v = 1 + (1 ~~ $fn); 1950EXPECT 1951Use of uninitialized value in addition (+) at - line 4. 1952######## 1953use warnings 'uninitialized'; 1954my $v; 1955my $f = ""; 1956$v = 1 + (print STDIN $f); # print to STDIN returns undef 1957EXPECT 1958Use of uninitialized value in addition (+) at - line 4. 1959######## 1960use warnings 'uninitialized'; 1961my $v; 1962my $f = ""; 1963$v = 1 + (printf STDIN "%s", $f); 1964EXPECT 1965Use of uninitialized value in addition (+) at - line 4. 1966######## 1967use warnings 'uninitialized'; 1968my $v; 1969my $f = ""; 1970{ use feature 'say'; $v = 1 + (say STDIN "%s", $f); } 1971EXPECT 1972Use of uninitialized value in addition (+) at - line 4. 1973######## 1974use warnings 'uninitialized'; 1975my $v; 1976my $f = ""; 1977$v = 1 + (unpack("",$f)); 1978EXPECT 1979Use of uninitialized value in addition (+) at - line 4. 1980######## 1981use warnings 'uninitialized'; 1982my $nofile = '/no/such/file'; 1983my $v; 1984my $f = ""; 1985$v = 1 + sysopen($f, $nofile, 0); 1986EXPECT 1987Use of uninitialized value in addition (+) at - line 5. 1988######## 1989use warnings 'uninitialized'; 1990my $v; 1991{ my $x = -1; $v = 1 + sysseek(DATA, $x, 0); } 1992__END__ 1993EXPECT 1994Use of uninitialized value in addition (+) at - line 3. 1995######## 1996use warnings 'uninitialized'; 1997delete $::{'Foo::'}; 1998my $moo = $Foo::BAR + 42; 1999__END__ 2000EXPECT 2001Use of uninitialized value in addition (+) at - line 3. 2002######## 2003use warnings 'uninitialized'; 2004use constant {u=>undef, v=>undef}; 2005sub foo () {u} 2006sub foo () {v} 2007EXPECT 2008######## 2009# [perl #72090] 2010use warnings 'uninitialized'; 2011$a = @$a > 0; 2012EXPECT 2013Use of uninitialized value $a in array dereference at - line 3. 2014Use of uninitialized value in numeric gt (>) at - line 3. 2015######## 2016# [perl #103766] 2017use warnings 'uninitialized'; 2018"@{[ $x ]}"; 2019EXPECT 2020Use of uninitialized value in join or string at - line 3. 2021######## 2022# inside formats 2023use warnings 'uninitialized'; 2024my $x; 2025format = 2026@ 2027"$x"; 2028. 2029write; 2030EXPECT 2031Use of uninitialized value $x in string at - line 6. 2032######## 2033# NAME off-by-one error in hash bucket walk in key detection logic 2034use warnings 'uninitialized'; 2035 2036for ( 0 .. 20 ) { # we assume that this means we test keys for every bucket 2037 my %h= ( $_ => undef ); 2038 my $s= sprintf "%s", $h{$_}; 2039} 2040EXPECT 2041Use of uninitialized value $h{"0"} in sprintf at - line 5. 2042Use of uninitialized value $h{"1"} in sprintf at - line 5. 2043Use of uninitialized value $h{"2"} in sprintf at - line 5. 2044Use of uninitialized value $h{"3"} in sprintf at - line 5. 2045Use of uninitialized value $h{"4"} in sprintf at - line 5. 2046Use of uninitialized value $h{"5"} in sprintf at - line 5. 2047Use of uninitialized value $h{"6"} in sprintf at - line 5. 2048Use of uninitialized value $h{"7"} in sprintf at - line 5. 2049Use of uninitialized value $h{"8"} in sprintf at - line 5. 2050Use of uninitialized value $h{"9"} in sprintf at - line 5. 2051Use of uninitialized value $h{"10"} in sprintf at - line 5. 2052Use of uninitialized value $h{"11"} in sprintf at - line 5. 2053Use of uninitialized value $h{"12"} in sprintf at - line 5. 2054Use of uninitialized value $h{"13"} in sprintf at - line 5. 2055Use of uninitialized value $h{"14"} in sprintf at - line 5. 2056Use of uninitialized value $h{"15"} in sprintf at - line 5. 2057Use of uninitialized value $h{"16"} in sprintf at - line 5. 2058Use of uninitialized value $h{"17"} in sprintf at - line 5. 2059Use of uninitialized value $h{"18"} in sprintf at - line 5. 2060Use of uninitialized value $h{"19"} in sprintf at - line 5. 2061Use of uninitialized value $h{"20"} in sprintf at - line 5. 2062######## 2063# NAME SvPOK && SvLEN==0 should not produce uninit warning 2064use warnings 'uninitialized'; 2065 2066$v = int(${qr||}); # sv_2iv on a regexp 2067$v = 1.1 * ${qr||}; # sv_2nv on a regexp 2068$v = ${qr||} << 2; # sv_2uv on a regexp 2069 2070sub TIESCALAR{bless[]} 2071sub FETCH {${qr||}} 2072tie $t, ""; 2073$v = 1.1 * $t; # sv_2nv on a tied regexp 2074 2075EXPECT 2076######## 2077# multi-level uninitialised array/hash indexes 2078use warnings 'uninitialized'; 2079 2080our ($i0, $i2, $i4, $i6, $i8, $i10, $i12); 2081my ($i1, $i3, $i5, $i7, $i9, $i11, $i13); 2082 2083my (@a,%h); 2084my $v; 2085 2086 2087# use enough depth that OP_MULTIDEREF needs more than one action word 2088 2089$v = $a[$i0]{$i1}[$i2]{$i3}[$i4]{$i5}[$i6]{$i7}[$i8]{$i9}[$i10]{$i11}[$i12]{$i13}; 2090$v = $h{$i0}[$i1]{$i2}[$i3]{$i4}[$i5]{$i6}[$i7]{$i8}[$i9]{$i10}[$i11]{$i12}[$i13]; 2091 2092EXPECT 2093Use of uninitialized value $i0 in array element at - line 13. 2094Use of uninitialized value $i1 in hash element at - line 13. 2095Use of uninitialized value $i2 in array element at - line 13. 2096Use of uninitialized value $i3 in hash element at - line 13. 2097Use of uninitialized value $i4 in array element at - line 13. 2098Use of uninitialized value $i5 in hash element at - line 13. 2099Use of uninitialized value $i6 in array element at - line 13. 2100Use of uninitialized value $i7 in hash element at - line 13. 2101Use of uninitialized value $i8 in array element at - line 13. 2102Use of uninitialized value $i9 in hash element at - line 13. 2103Use of uninitialized value $i10 in array element at - line 13. 2104Use of uninitialized value $i11 in hash element at - line 13. 2105Use of uninitialized value $i12 in array element at - line 13. 2106Use of uninitialized value $i13 in hash element at - line 13. 2107Use of uninitialized value $i0 in hash element at - line 14. 2108Use of uninitialized value $i1 in array element at - line 14. 2109Use of uninitialized value $i2 in hash element at - line 14. 2110Use of uninitialized value $i3 in array element at - line 14. 2111Use of uninitialized value $i4 in hash element at - line 14. 2112Use of uninitialized value $i5 in array element at - line 14. 2113Use of uninitialized value $i6 in hash element at - line 14. 2114Use of uninitialized value $i7 in array element at - line 14. 2115Use of uninitialized value $i8 in hash element at - line 14. 2116Use of uninitialized value $i9 in array element at - line 14. 2117Use of uninitialized value $i10 in hash element at - line 14. 2118Use of uninitialized value $i11 in array element at - line 14. 2119Use of uninitialized value $i12 in hash element at - line 14. 2120Use of uninitialized value $i13 in array element at - line 14. 2121######## 2122# misc multideref 2123use warnings 'uninitialized'; 2124my ($i,$j,$k); 2125my @a; 2126my @ra = \@a; 2127my $v; 2128$v = exists $a[$i]{$k}; 2129$v = delete $a[$i]{$k}; 2130$v = local $a[$i]{$k}; 2131delete $a[$i]{$k}; 2132$v = $ra->[$i+$j]{$k}; 2133$v = ($ra//0)->[$i]{$k}; 2134$v = $a[length $i]{$k} 2135EXPECT 2136Use of uninitialized value $i in array element at - line 7. 2137Use of uninitialized value $k in exists at - line 7. 2138Use of uninitialized value $i in array element at - line 8. 2139Use of uninitialized value $k in delete at - line 8. 2140Use of uninitialized value $i in array element at - line 9. 2141Use of uninitialized value $k in hash element at - line 9. 2142Use of uninitialized value $k in hash element at - line 9. 2143Use of uninitialized value $k in hash element at - line 9. 2144Use of uninitialized value $i in array element at - line 10. 2145Use of uninitialized value $k in delete at - line 10. 2146Use of uninitialized value $j in addition (+) at - line 11. 2147Use of uninitialized value $i in addition (+) at - line 11. 2148Use of uninitialized value $k in hash element at - line 11. 2149Use of uninitialized value $i in array element at - line 12. 2150Use of uninitialized value $k in hash element at - line 12. 2151Use of uninitialized value $i in array element at - line 13. 2152Use of uninitialized value $k in hash element at - line 13. 2153######## 2154# perl #127877 2155use warnings 'uninitialized'; 2156my ($p, $q, $r, $s, $t, $u, $v, $w, $x, $y); 2157$p = $p . "a"; 2158$q .= "a"; 2159$r = $r + 17; 2160$s += 17; 2161$t = $t - 17; 2162$u -= 17; 2163use integer; 2164$v = $v + 17; 2165$w += 17; 2166$x = $x - 17; 2167$y -= 17; 2168EXPECT 2169Use of uninitialized value $p in concatenation (.) or string at - line 4. 2170Use of uninitialized value $r in addition (+) at - line 6. 2171Use of uninitialized value $t in subtraction (-) at - line 8. 2172Use of uninitialized value $v in integer addition (+) at - line 11. 2173Use of uninitialized value $x in integer subtraction (-) at - line 13. 2174######## 2175# NAME 64-bit array subscripts 2176# SKIP ? length(pack "p", "") < 8 2177use warnings 'uninitialized'; 2178 2179# aelem + const 2180use constant foo => \0; 2181$SIG{__WARN__} = sub { 2182 print STDERR 2183 $_[0] =~ /\$a\[([^]]+)]/ && $1 == foo 2184 ? "ok\n" 2185 : ("$1 != ",0+foo,"\n") 2186}; 2187() = "$a[foo]"; 2188undef $SIG{__WARN__}; 2189 2190# Multideref 2191() = "$a[140688675223280]"; 2192EXPECT 2193ok 2194Use of uninitialized value $a[140688675223280] in string at - line 15. 2195######## 2196# RT #128940 2197use warnings 'uninitialized'; 2198my $x = "" . open my $fh, "<", "no / such / file"; 2199EXPECT 2200Use of uninitialized value in concatenation (.) or string at - line 3. 2201######## 2202# RT #123910 2203# undef's arg being undef doesn't trigger warnings - any warning will be 2204# from tied/magic vars 2205use warnings 'uninitialized'; 2206undef $0; 2207EXPECT 2208Use of uninitialized value in undef operator at - line 5. 2209######## 2210# RT #134275 2211# This was SEGVing due to the multideref code in S_find_uninit_var not 2212# handling a GV with a null gp_hv slot. 2213use warnings 'uninitialized'; 2214"" =~ /$foo{a}${*foo=*bar}$x/; 2215EXPECT 2216Use of uninitialized value in regexp compilation at - line 5. 2217Use of uninitialized value in regexp compilation at - line 5. 2218Use of uninitialized value $x in regexp compilation at - line 5. 2219