1 op.c AOK 2 3 Found = in conditional, should be == 4 1 if $a = 1 ; 5 6 Scalar value %.*s better written as $%.*s" 7 @a[3] = 2; 8 @a{3} = 2; 9 10 Useless use of time in void context 11 Useless use of a variable in void context 12 Useless use of a constant in void context 13 time ; 14 $a ; 15 "abc" 16 17 Useless use of sort in scalar context 18 my $x = sort (2,1,3); 19 20 Applying %s to %s will act on scalar(%s) 21 my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; 22 @a =~ /abc/ ; 23 @a =~ s/a/b/ ; 24 @a =~ tr/a/b/ ; 25 @$b =~ /abc/ ; 26 @$b =~ s/a/b/ ; 27 @$b =~ tr/a/b/ ; 28 %a =~ /abc/ ; 29 %a =~ s/a/b/ ; 30 %a =~ tr/a/b/ ; 31 %$c =~ /abc/ ; 32 %$c =~ s/a/b/ ; 33 %$c =~ tr/a/b/ ; 34 35 36 Parentheses missing around "my" list at -e line 1. 37 my $a, $b = (1,2); 38 39 Parentheses missing around "local" list at -e line 1. 40 local $a, $b = (1,2); 41 42 Bareword found in conditional at -e line 1. 43 use warnings 'bareword'; my $x = print(ABC || 1); 44 45 Value of %s may be \"0\"; use \"defined\" 46 $x = 1 if $x = <FH> ; 47 $x = 1 while $x = <FH> ; 48 49 Subroutine fred redefined at -e line 1. 50 sub fred{1;} sub fred{1;} 51 52 Constant subroutine %s redefined 53 sub fred() {1;} sub fred() {1;} 54 55 Format FRED redefined at /tmp/x line 5. 56 format FRED = 57 . 58 format FRED = 59 . 60 61 Statement unlikely to be reached 62 (Maybe you meant system() when you said exec()? 63 exec "true" ; my $a 64 65 Can't use defined(@array) (Maybe you should just omit the defined()?) 66 my @a ; defined @a ; 67 defined (@a = (1,2,3)) ; 68 69 Can't use defined(%hash) (Maybe you should just omit the defined()?) 70 my %h ; defined %h ; 71 72 "my %s" used in sort comparison 73 74 $[ used in comparison (did you mean $] ?) 75 76 length() used on @array (did you mean "scalar(@array)"?) 77 length() used on %hash (did you mean "scalar(keys %hash)"?) 78 79 /---/ should probably be written as "---" 80 join(/---/, @foo); 81 82 %s() called too early to check prototype [Perl_peep] 83 fred() ; sub fred ($$) {} 84 85 86 Package '%s' not found (did you use the incorrect case?) 87 88 Use of /g modifier is meaningless in split 89 90 Possible precedence problem on bitwise %c operator [Perl_ck_bitop] 91 92 Mandatory Warnings 93 ------------------ 94 Prototype mismatch: [cv_ckproto] 95 sub fred() ; 96 sub fred($) {} 97 98 oops: oopsAV [oopsAV] TODO 99 oops: oopsHV [oopsHV] TODO 100 101__END__ 102# op.c 103use warnings 'syntax' ; 1041 if $a = 1 ; 1051 if $a 106 = 1 ; 107no warnings 'syntax' ; 1081 if $a = 1 ; 1091 if $a 110 = 1 ; 111EXPECT 112Found = in conditional, should be == at - line 3. 113Found = in conditional, should be == at - line 4. 114######## 115# op.c 116use warnings 'syntax' ; 117use constant foo => 1; 1181 if $a = foo ; 119no warnings 'syntax' ; 1201 if $a = foo ; 121EXPECT 122######## 123# op.c 124# NAME unless with assignment as condition 125use warnings 'syntax'; 1261 unless $a = 1; 127unless ($a = 1) { 128 1; 129} 130EXPECT 131Found = in conditional, should be == at - line 3. 132Found = in conditional, should be == at - line 4. 133######## 134# op.c 135# NAME while with assignment as condition 136use warnings 'syntax'; 1371 while $a = 0; 138while ($a = 0) { 139 1; 140} 141EXPECT 142Found = in conditional, should be == at - line 3. 143Found = in conditional, should be == at - line 4. 144######## 145# op.c 146# NAME until with assignment as condition 147use warnings 'syntax'; 1481 until $a = 1; 149until ($a = 1) { 150 1; 151} 152EXPECT 153Found = in conditional, should be == at - line 3. 154Found = in conditional, should be == at - line 4. 155######## 156# op.c 157use warnings 'syntax' ; 158@a[3]; 159@a{3}; 160@a["]"]; 161@a{"]"}; 162@a["}"]; 163@a{"}"}; 164@a{$_}; 165@a{--$_}; 166@a[$_]; 167@a[--$_]; 168delete @a[$x]; 169delete @a{$x}; 170no warnings 'syntax' ; 171@a[3]; 172@a{3}; 173delete @a[$x]; 174delete @a{$x}; 175EXPECT 176Scalar value @a[3] better written as $a[3] at - line 3. 177Scalar value @a{3} better written as $a{3} at - line 4. 178Scalar value @a["]"] better written as $a["]"] at - line 5. 179Scalar value @a{"]"} better written as $a{"]"} at - line 6. 180Scalar value @a["}"] better written as $a["}"] at - line 7. 181Scalar value @a{"}"} better written as $a{"}"} at - line 8. 182Scalar value @a{...} better written as $a{...} at - line 9. 183Scalar value @a{...} better written as $a{...} at - line 10. 184Scalar value @a[...] better written as $a[...] at - line 11. 185Scalar value @a[...] better written as $a[...] at - line 12. 186Scalar value @a[...] better written as $a[...] at - line 13. 187Scalar value @a{...} better written as $a{...} at - line 14. 188######## 189# op.c 190# [perl #132645] 191use warnings 'syntax'; 192@inf[3]; 193EXPECT 194Scalar value @inf[3] better written as $inf[3] at - line 4. 195######## 196# op.c 197use utf8; 198use open qw( :utf8 :std ); 199use warnings 'syntax' ; 200@à[3]; 201@à{3}; 202no warnings 'syntax' ; 203@à[3]; 204@à{3}; 205EXPECT 206Scalar value @à[3] better written as $à[3] at - line 5. 207Scalar value @à{3} better written as $à{3} at - line 6. 208######## 209# op.c 210use utf8; 211use open qw( :utf8 :std ); 212use warnings 'syntax' ; 213@ぁ[3]; 214@ぁ{3}; 215no warnings 'syntax' ; 216@ぁ[3]; 217@ぁ{3}; 218EXPECT 219Scalar value @ぁ[3] better written as $ぁ[3] at - line 5. 220Scalar value @ぁ{3} better written as $ぁ{3} at - line 6. 221######## 222# op.c 223# "Scalar value better written as" false positives 224# [perl #28380] and [perl #114024] 225use warnings 'syntax'; 226 227# hashes 228@h{qw"a b c"} = 1..3; 229@h{qw'a b c'} = 1..3; 230@h{qw$a b c$} = 1..3; 231@h{qw-a b c-} = 1..3; 232@h{qw#a b c#} = 1..3; 233@h{ qw#a b c#} = 1..3; 234@h{ qw#a b c#} = 1..3; # tab before qw 235@h{qw "a"}; 236@h{ qw "a"}; 237@h{ qw "a"}; 238sub foo() { qw/abc def ghi/ } 239@X{+foo} = ( 1 .. 3 ); 240$_ = "abc"; @X{split ""} = ( 1 .. 3 ); 241my @s = @f{"}", "a"}; 242my @s = @f{"]", "a"}; 243@a{$],0}; 244@_{0} = /(.*)/; 245@h{m "$re"}; 246@h{qx ""} if 0; 247@h{glob ""}; 248@h{readline ""}; 249@h{m ""}; 250use constant phoo => 1..3; 251@h{+phoo}; # rv2av 252@h{sort foo}; 253@h{reverse foo}; 254@h{caller 0}; 255@h{lstat ""}; 256@h{stat ""}; 257@h{readdir ""}; 258@h{system ""} if 0; 259@h{+times} if 0; 260@h{localtime 0}; 261@h{gmtime 0}; 262@h{eval ""}; 263 264# arrays 265@h[qw"a b c"] = 1..3; 266@h[qw'a b c'] = 1..3; 267@h[qw$a b c$] = 1..3; 268@h[qw-a b c-] = 1..3; 269@h[qw#a b c#] = 1..3; 270@h[ qw#a b c#] = 1..3; 271@h[ qw#a b c#] = 1..3; # tab before qw 272@h[qw "a"]; 273@h[ qw "a"]; 274@h[ qw "a"]; 275sub foo() { qw/abc def ghi/ } 276@X[+foo] = ( 1 .. 3 ); 277$_ = "abc"; @X[split ""] = ( 1 .. 3 ); 278my @s = @f["}", "a"]; 279my @s = @f["]", "a"]; 280@a[$],0]; 281@_[0] = /(.*)/; 282@h[m "$re"]; 283@h[qx ""] if 0; 284@h[glob ""]; 285@h[readline ""]; 286@h[m ""]; 287use constant phoo => 1..3; 288@h[+phoo]; # rv2av 289@h[sort foo]; 290@h[reverse foo]; 291@h[caller 0]; 292@h[lstat ""]; 293@h[stat ""]; 294@h[readdir ""]; 295@h[system ""] if 0; 296@h[+times] if 0; 297@h[localtime 0]; 298@h[gmtime 0]; 299@h[eval ""]; 300EXPECT 301######## 302# op.c 303# "Scalar value better written as" should not trigger for syntax errors 304use warnings 'syntax'; 305@a[] 306EXPECT 307syntax error at - line 4, near "[]" 308Execution of - aborted due to compilation errors. 309######## 310# op.c 311my %foo; 312%main::foo->{"bar"}; 313EXPECT 314OPTION fatal 315Can't use a hash as a reference at - line 3. 316######## 317# op.c 318my %foo; 319%foo->{"bar"}; 320EXPECT 321OPTION fatal 322Can't use a hash as a reference at - line 3. 323######## 324# op.c 325my @foo; 326@main::foo->[23]; 327EXPECT 328OPTION fatal 329Can't use an array as a reference at - line 3. 330######## 331# op.c 332my @foo; 333@foo->[23]; 334EXPECT 335OPTION fatal 336Can't use an array as a reference at - line 3. 337######## 338# op.c 339my %foo; 340$main::foo = {}; %$main::foo->{"bar"}; 341EXPECT 342OPTION fatal 343Can't use a hash as a reference at - line 3. 344######## 345# op.c 346my %foo; 347$foo = {}; %$foo->{"bar"}; 348EXPECT 349OPTION fatal 350Can't use a hash as a reference at - line 3. 351######## 352# op.c 353my @foo; 354$main::foo = []; @$main::foo->[34]; 355EXPECT 356OPTION fatal 357Can't use an array as a reference at - line 3. 358######## 359# op.c 360my @foo; 361$foo = []; @$foo->[34]; 362EXPECT 363OPTION fatal 364Can't use an array as a reference at - line 3. 365######## 366# op.c 367use warnings 'void' ; no warnings 'experimental::smartmatch'; close STDIN ; 368#line 2 3691 x 3 ; # OP_REPEAT (folded) 370(1) x 3 ; # OP_REPEAT 371 # OP_GVSV 372wantarray ; # OP_WANTARRAY 373 # OP_GV 374 # OP_PADSV 375 # OP_PADAV 376 # OP_PADHV 377 # OP_PADANY 378 # OP_AV2ARYLEN 379ref ; # OP_REF 380\(@a) ; # OP_REFGEN 381\$a ; # OP_SREFGEN 382defined $a ; # OP_DEFINED 383hex $a ; # OP_HEX 384oct $a ; # OP_OCT 385length $a ; # OP_LENGTH 386substr $a,1 ; # OP_SUBSTR 387vec $a,1,2 ; # OP_VEC 388index $a,1,2 ; # OP_INDEX 389rindex $a,1,2 ; # OP_RINDEX 390sprintf $a ; # OP_SPRINTF 391$a[0] ; # OP_AELEM 392 # OP_AELEMFAST 393@a[0] ; # OP_ASLICE 394#values %a ; # OP_VALUES 395#keys %a ; # OP_KEYS 396$a{0} ; # OP_HELEM 397@a{0} ; # OP_HSLICE 398unpack "a", "a" ; # OP_UNPACK 399pack $a,"" ; # OP_PACK 400join "", @_ ; # OP_JOIN 401(@a)[0,1] ; # OP_LSLICE 402 # OP_ANONLIST 403 # OP_ANONHASH 404sort(1,2) ; # OP_SORT 405reverse(1,2) ; # OP_REVERSE 406 # OP_RANGE 407 # OP_FLIP 408(1 ..2) ; # OP_FLOP 409caller ; # OP_CALLER 410fileno STDIN ; # OP_FILENO 411eof STDIN ; # OP_EOF 412tell STDIN ; # OP_TELL 413readlink 1; # OP_READLINK 414time ; # OP_TIME 415localtime ; # OP_LOCALTIME 416gmtime ; # OP_GMTIME 417eval { getgrnam 1 }; # OP_GGRNAM 418eval { getgrgid 1 }; # OP_GGRGID 419eval { getpwnam 1 }; # OP_GPWNAM 420eval { getpwuid 1 }; # OP_GPWUID 421prototype "foo"; # OP_PROTOTYPE 422$a ~~ $b; # OP_SMARTMATCH 423$a <=> $b; # OP_NCMP 424"dsatrewq"; 425"diatrewq"; 426"igatrewq"; 427use 5.015; 428__SUB__ ; # OP_RUNCV 429[]; # OP_ANONLIST 430grep /42/, (1,2); # OP_GREP. Not warned about (yet). Grep git logs for void_unusual to see why... 431EXPECT 432Useless use of a constant ("111") in void context at - line 2. 433Useless use of repeat (x) in void context at - line 3. 434Useless use of wantarray in void context at - line 5. 435Useless use of reference-type operator in void context at - line 12. 436Useless use of reference constructor in void context at - line 13. 437Useless use of single ref constructor in void context at - line 14. 438Useless use of defined operator in void context at - line 15. 439Useless use of hex in void context at - line 16. 440Useless use of oct in void context at - line 17. 441Useless use of length in void context at - line 18. 442Useless use of substr in void context at - line 19. 443Useless use of vec in void context at - line 20. 444Useless use of index in void context at - line 21. 445Useless use of rindex in void context at - line 22. 446Useless use of sprintf in void context at - line 23. 447Useless use of array element in void context at - line 24. 448Useless use of array slice in void context at - line 26. 449Useless use of hash element in void context at - line 29. 450Useless use of hash slice in void context at - line 30. 451Useless use of unpack in void context at - line 31. 452Useless use of pack in void context at - line 32. 453Useless use of join or string in void context at - line 33. 454Useless use of list slice in void context at - line 34. 455Useless use of sort in void context at - line 37. 456Useless use of reverse in void context at - line 38. 457Useless use of range (or flop) in void context at - line 41. 458Useless use of caller in void context at - line 42. 459Useless use of fileno in void context at - line 43. 460Useless use of eof in void context at - line 44. 461Useless use of tell in void context at - line 45. 462Useless use of readlink in void context at - line 46. 463Useless use of time in void context at - line 47. 464Useless use of localtime in void context at - line 48. 465Useless use of gmtime in void context at - line 49. 466Useless use of getgrnam in void context at - line 50. 467Useless use of getgrgid in void context at - line 51. 468Useless use of getpwnam in void context at - line 52. 469Useless use of getpwuid in void context at - line 53. 470Useless use of subroutine prototype in void context at - line 54. 471Useless use of smart match in void context at - line 55. 472Useless use of numeric comparison (<=>) in void context at - line 56. 473Useless use of a constant ("dsatrewq") in void context at - line 57. 474Useless use of a constant ("diatrewq") in void context at - line 58. 475Useless use of a constant ("igatrewq") in void context at - line 59. 476Useless use of __SUB__ in void context at - line 61. 477Useless use of anonymous array ([]) in void context at - line 62. 478######## 479# op.c 480use warnings 'void' ; close STDIN ; 481my $x = sort (2,1,3); 482no warnings 'void' ; 483$x = sort (2,1,3); 484EXPECT 485Useless use of sort in scalar context at - line 3. 486######## 487# op.c 488no warnings 'void' ; close STDIN ; 4891 x 3 ; # OP_REPEAT 490 # OP_GVSV 491wantarray ; # OP_WANTARRAY 492 # OP_GV 493 # OP_PADSV 494 # OP_PADAV 495 # OP_PADHV 496 # OP_PADANY 497 # OP_AV2ARYLEN 498ref ; # OP_REF 499\@a ; # OP_REFGEN 500\$a ; # OP_SREFGEN 501defined $a ; # OP_DEFINED 502hex $a ; # OP_HEX 503oct $a ; # OP_OCT 504length $a ; # OP_LENGTH 505substr $a,1 ; # OP_SUBSTR 506vec $a,1,2 ; # OP_VEC 507index $a,1,2 ; # OP_INDEX 508rindex $a,1,2 ; # OP_RINDEX 509sprintf $a ; # OP_SPRINTF 510$a[0] ; # OP_AELEM 511 # OP_AELEMFAST 512@a[0] ; # OP_ASLICE 513#values %a ; # OP_VALUES 514#keys %a ; # OP_KEYS 515$a{0} ; # OP_HELEM 516@a{0} ; # OP_HSLICE 517unpack "a", "a" ; # OP_UNPACK 518pack $a,"" ; # OP_PACK 519join "" ; # OP_JOIN 520(@a)[0,1] ; # OP_LSLICE 521 # OP_ANONLIST 522 # OP_ANONHASH 523sort(1,2) ; # OP_SORT 524reverse(1,2) ; # OP_REVERSE 525 # OP_RANGE 526 # OP_FLIP 527(1 ..2) ; # OP_FLOP 528caller ; # OP_CALLER 529fileno STDIN ; # OP_FILENO 530eof STDIN ; # OP_EOF 531tell STDIN ; # OP_TELL 532readlink 1; # OP_READLINK 533time ; # OP_TIME 534localtime ; # OP_LOCALTIME 535gmtime ; # OP_GMTIME 536eval { getgrnam 1 }; # OP_GGRNAM 537eval { getgrgid 1 }; # OP_GGRGID 538eval { getpwnam 1 }; # OP_GPWNAM 539eval { getpwuid 1 }; # OP_GPWUID 540prototype "foo"; # OP_PROTOTYPE 541EXPECT 542######## 543# op.c 544use warnings 'void' ; 545for (@{[0]}) { "$_" } # check warning isn't duplicated 546no warnings 'void' ; 547for (@{[0]}) { "$_" } # check warning isn't duplicated 548EXPECT 549Useless use of string in void context at - line 3. 550######## 551# op.c 552use warnings 'void' ; 553use Config ; 554BEGIN { 555 if ( ! $Config{d_telldir}) { 556 print <<EOM ; 557SKIPPED 558# telldir not present 559EOM 560 exit 561 } 562} 563telldir 1 ; # OP_TELLDIR 564no warnings 'void' ; 565telldir 1 ; # OP_TELLDIR 566EXPECT 567Useless use of telldir in void context at - line 13. 568######## 569# op.c 570use warnings 'void' ; 571use Config ; 572BEGIN { 573 if ( ! $Config{d_getppid}) { 574 print <<EOM ; 575SKIPPED 576# getppid not present 577EOM 578 exit 579 } 580} 581getppid ; # OP_GETPPID 582no warnings 'void' ; 583getppid ; # OP_GETPPID 584EXPECT 585Useless use of getppid in void context at - line 13. 586######## 587# op.c 588use warnings 'void' ; 589use Config ; 590BEGIN { 591 if ( ! $Config{d_getpgrp}) { 592 print <<EOM ; 593SKIPPED 594# getpgrp not present 595EOM 596 exit 597 } 598} 599getpgrp ; # OP_GETPGRP 600no warnings 'void' ; 601getpgrp ; # OP_GETPGRP 602EXPECT 603Useless use of getpgrp in void context at - line 13. 604######## 605# op.c 606use warnings 'void' ; 607use Config ; 608BEGIN { 609 if ( ! $Config{d_times}) { 610 print <<EOM ; 611SKIPPED 612# times not present 613EOM 614 exit 615 } 616} 617times ; # OP_TMS 618no warnings 'void' ; 619times ; # OP_TMS 620EXPECT 621Useless use of times in void context at - line 13. 622######## 623# op.c 624use warnings 'void' ; 625use Config ; 626BEGIN { 627 if ( ! $Config{d_getprior} or $^O eq 'os2') { # Locks before fixpak22 628 print <<EOM ; 629SKIPPED 630# getpriority not present 631EOM 632 exit 633 } 634} 635getpriority 1,2; # OP_GETPRIORITY 636no warnings 'void' ; 637getpriority 1,2; # OP_GETPRIORITY 638EXPECT 639Useless use of getpriority in void context at - line 13. 640######## 641# op.c 642use warnings 'void' ; 643use Config ; 644BEGIN { 645 if ( ! $Config{d_getlogin}) { 646 print <<EOM ; 647SKIPPED 648# getlogin not present 649EOM 650 exit 651 } 652} 653getlogin ; # OP_GETLOGIN 654no warnings 'void' ; 655getlogin ; # OP_GETLOGIN 656EXPECT 657Useless use of getlogin in void context at - line 13. 658######## 659# op.c 660use warnings 'void' ; 661use Config ; BEGIN { 662if ( ! $Config{d_socket}) { 663 print <<EOM ; 664SKIPPED 665# getsockname not present 666# getpeername not present 667# gethostbyname not present 668# gethostbyaddr not present 669# gethostent not present 670# getnetbyname not present 671# getnetbyaddr not present 672# getnetent not present 673# getprotobyname not present 674# getprotobynumber not present 675# getprotoent not present 676# getservbyname not present 677# getservbyport not present 678# getservent not present 679EOM 680 exit 681} } 682getsockname STDIN ; # OP_GETSOCKNAME 683getpeername STDIN ; # OP_GETPEERNAME 684gethostbyname 1 ; # OP_GHBYNAME 685gethostbyaddr 1,2; # OP_GHBYADDR 686gethostent ; # OP_GHOSTENT 687getnetbyname 1 ; # OP_GNBYNAME 688getnetbyaddr 1,2 ; # OP_GNBYADDR 689getnetent ; # OP_GNETENT 690getprotobyname 1; # OP_GPBYNAME 691getprotobynumber 1; # OP_GPBYNUMBER 692getprotoent ; # OP_GPROTOENT 693getservbyname 1,2; # OP_GSBYNAME 694getservbyport 1,2; # OP_GSBYPORT 695getservent ; # OP_GSERVENT 696 697no warnings 'void' ; 698getsockname STDIN ; # OP_GETSOCKNAME 699getpeername STDIN ; # OP_GETPEERNAME 700gethostbyname 1 ; # OP_GHBYNAME 701gethostbyaddr 1,2; # OP_GHBYADDR 702gethostent ; # OP_GHOSTENT 703getnetbyname 1 ; # OP_GNBYNAME 704getnetbyaddr 1,2 ; # OP_GNBYADDR 705getnetent ; # OP_GNETENT 706getprotobyname 1; # OP_GPBYNAME 707getprotobynumber 1; # OP_GPBYNUMBER 708getprotoent ; # OP_GPROTOENT 709getservbyname 1,2; # OP_GSBYNAME 710getservbyport 1,2; # OP_GSBYPORT 711getservent ; # OP_GSERVENT 712INIT { 713 # some functions may not be there, so we exit without running 714 exit; 715} 716EXPECT 717Useless use of getsockname in void context at - line 24. 718Useless use of getpeername in void context at - line 25. 719Useless use of gethostbyname in void context at - line 26. 720Useless use of gethostbyaddr in void context at - line 27. 721Useless use of gethostent in void context at - line 28. 722Useless use of getnetbyname in void context at - line 29. 723Useless use of getnetbyaddr in void context at - line 30. 724Useless use of getnetent in void context at - line 31. 725Useless use of getprotobyname in void context at - line 32. 726Useless use of getprotobynumber in void context at - line 33. 727Useless use of getprotoent in void context at - line 34. 728Useless use of getservbyname in void context at - line 35. 729Useless use of getservbyport in void context at - line 36. 730Useless use of getservent in void context at - line 37. 731######## 732# op.c 733use warnings 'void' ; 734*a ; # OP_RV2GV 735$a ; # OP_RV2SV 736@a ; # OP_RV2AV 737%a ; # OP_RV2HV 738no warnings 'void' ; 739*a ; # OP_RV2GV 740$a ; # OP_RV2SV 741@a ; # OP_RV2AV 742%a ; # OP_RV2HV 743EXPECT 744Useless use of a variable in void context at - line 3. 745Useless use of a variable in void context at - line 4. 746Useless use of a variable in void context at - line 5. 747Useless use of a variable in void context at - line 6. 748######## 749# op.c 750use warnings 'void' ; 751"abc"; # OP_CONST 7527 ; # OP_CONST 753"x" . "y"; # optimized to OP_CONST 7542 + 2; # optimized to OP_CONST 755use constant U => undef; 756U; 757qq/" \n/; 7585 || print "bad\n"; # test OPpCONST_SHORTCIRCUIT 759print "boo\n" if U; # test OPpCONST_SHORTCIRCUIT 760if($foo){}elsif(""){} # test OPpCONST_SHORTCIRCUIT 761no warnings 'void' ; 762"abc"; # OP_CONST 7637 ; # OP_CONST 764"x" . "y"; # optimized to OP_CONST 7652 + 2; # optimized to OP_CONST 766EXPECT 767Useless use of a constant ("abc") in void context at - line 3. 768Useless use of a constant (7) in void context at - line 4. 769Useless use of a constant ("xy") in void context at - line 5. 770Useless use of a constant (4) in void context at - line 6. 771Useless use of a constant (undef) in void context at - line 8. 772Useless use of a constant ("\"\t\n") in void context at - line 9. 773######## 774# op.c 775BEGIN { 776 if (ord('A') == 193) { 777 print "SKIPPED\n# Result varies depending on EBCDIC code page"; 778 exit 0; 779 } 780} 781use utf8; 782use open qw( :utf8 :std ); 783use warnings 'void' ; 784"àḆc"; # OP_CONST 785EXPECT 786Useless use of a constant ("\340\x{1e06}c") in void context at - line 11. 787######## 788# op.c 789use utf8; 790use open qw( :utf8 :std ); 791use warnings 'void' ; 792"Ẋ" . "ƴ"; # optimized to OP_CONST 793FOO; # Bareword optimized to OP_CONST 794use constant ů => undef; 795ů; 7965 || print "bad\n"; # test OPpCONST_SHORTCIRCUIT 797print "boo\n" if ů; # test OPpCONST_SHORTCIRCUIT 798no warnings 'void' ; 799"àḆc"; # OP_CONST 800"Ẋ" . "ƴ"; # optimized to OP_CONST 801EXPECT 802Useless use of a constant ("\x{1e8a}\x{1b4}") in void context at - line 5. 803Useless use of a constant ("\x{ff26}\x{ff2f}\x{ff2f}") in void context at - line 6. 804Useless use of a constant (undef) in void context at - line 8. 805######## 806# op.c 807# 808use warnings 'misc' ; use utf8; 809my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;my $d = 'test'; 810@a =~ /abc/ ; 811@a2 =~ s/a/b/ ; 812@a3 =~ tr/a/b/ ; 813@$b =~ /abc/ ; 814@$b =~ s/a/b/ ; 815@$b =~ tr/a/b/ ; 816%a =~ /abc/ ; 817%a2 =~ s/a/b/ ; 818%a3 =~ tr/a/b/ ; 819%$c =~ /abc/ ; 820%$c =~ s/a/b/ ; 821%$c =~ tr/a/b/ ; 822$d =~ tr/a/b/d ; 823$d2 =~ tr/a/bc/; 824$d3 =~ tr//b/c; 825$d =~ tr/α/β/d ; 826$d2 =~ tr/α/βγ/; 827{ 828no warnings 'misc' ; 829my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; my $d = 'test'; 830@a =~ /abc/ ; 831@a =~ s/a/b/ ; 832@a =~ tr/a/b/ ; 833@$b =~ /abc/ ; 834@$b =~ s/a/b/ ; 835@$b =~ tr/a/b/ ; 836%a =~ /abc/ ; 837%a =~ s/a/b/ ; 838%a =~ tr/a/b/ ; 839%$c =~ /abc/ ; 840%$c =~ s/a/b/ ; 841%$c =~ tr/a/b/ ; 842$d =~ tr/a/b/d ; 843$d =~ tr/a/bc/ ; 844$d =~ tr//b/c; 845} 846EXPECT 847Applying pattern match (m//) to @a will act on scalar(@a) at - line 5. 848Applying substitution (s///) to @a2 will act on scalar(@a2) at - line 6. 849Applying transliteration (tr///) to @a3 will act on scalar(@a3) at - line 7. 850Applying pattern match (m//) to @array will act on scalar(@array) at - line 8. 851Applying substitution (s///) to @array will act on scalar(@array) at - line 9. 852Applying transliteration (tr///) to @array will act on scalar(@array) at - line 10. 853Applying pattern match (m//) to %a will act on scalar(%a) at - line 11. 854Applying substitution (s///) to %a2 will act on scalar(%a2) at - line 12. 855Applying transliteration (tr///) to %a3 will act on scalar(%a3) at - line 13. 856Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 14. 857Applying substitution (s///) to %hash will act on scalar(%hash) at - line 15. 858Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 16. 859Useless use of /d modifier in transliteration operator at - line 17. 860Replacement list is longer than search list at - line 18. 861Useless use of /d modifier in transliteration operator at - line 20. 862Replacement list is longer than search list at - line 21. 863Can't modify array dereference in substitution (s///) at - line 6, near "s/a/b/ ;" 864BEGIN not safe after errors--compilation aborted at - line 23. 865######## 866# op.c 867use warnings 'parenthesis' ; 868my $a, $b = (1,2); 869my @foo,%bar, $quux; # there's a TAB here 870my $x, $y or print; 871my $p, *q; 872no warnings 'parenthesis' ; 873my $c, $d = (1,2); 874EXPECT 875Parentheses missing around "my" list at - line 3. 876Parentheses missing around "my" list at - line 4. 877######## 878# op.c 879use warnings 'parenthesis' ; 880our $a, $b = (1,2); 881our $p, *q; 882no warnings 'parenthesis' ; 883our $c, $d = (1,2); 884EXPECT 885Parentheses missing around "our" list at - line 3. 886######## 887# op.c 888use warnings 'parenthesis' ; 889local $a, $b = (1,2); 890local *f, *g; 891local $p, *q; 892no warnings 'parenthesis' ; 893local $c, $d = (1,2); 894EXPECT 895Parentheses missing around "local" list at - line 3. 896Parentheses missing around "local" list at - line 4. 897Parentheses missing around "local" list at - line 5. 898######## 899# op.c 900use warnings 'bareword' ; 901print (ABC || 1) ; 902no warnings 'bareword' ; 903print (ABC || 1) ; 904EXPECT 905Bareword found in conditional at - line 3. 906######## 907--FILE-- abc 908 909--FILE-- 910# op.c 911use warnings 'misc' ; 912open FH, "<abc" ; 913$x = 1 if $x = <FH> ; 914$x = 1 if $x 915 = <FH> ; 916no warnings 'misc' ; 917$x = 1 if $x = <FH> ; 918$x = 1 if $x 919 = <FH> ; 920EXPECT 921Value of <HANDLE> construct can be "0"; test with defined() at - line 4. 922Value of <HANDLE> construct can be "0"; test with defined() at - line 5. 923######## 924# op.c 925use warnings 'misc' ; 926opendir FH, "." ; 927$x = 1 if $x = readdir FH ; 928$x = 1 if $x 929 = readdir FH ; 930no warnings 'misc' ; 931$x = 1 if $x = readdir FH ; 932$x = 1 if $x 933 = readdir FH ; 934closedir FH ; 935EXPECT 936Value of readdir() operator can be "0"; test with defined() at - line 4. 937Value of readdir() operator can be "0"; test with defined() at - line 5. 938######## 939# op.c 940use warnings 'misc' ; 941$x = 1 if $x = <*> ; 942$x = 1 if $x 943 = <*> ; 944no warnings 'misc' ; 945$x = 1 if $x = <*> ; 946$x = 1 if $x 947 = <*> ; 948EXPECT 949Value of glob construct can be "0"; test with defined() at - line 3. 950Value of glob construct can be "0"; test with defined() at - line 4. 951######## 952# op.c 953use warnings 'misc' ; 954%a = (1,2,3,4) ; 955$x = 1 if $x = each %a ; 956no warnings 'misc' ; 957$x = 1 if $x = each %a ; 958EXPECT 959Value of each() operator can be "0"; test with defined() at - line 4. 960######## 961# op.c 962use warnings 'misc' ; 963$x = 1 while $x = <*> and 0 ; 964no warnings 'misc' ; 965$x = 1 while $x = <*> and 0 ; 966EXPECT 967Value of glob construct can be "0"; test with defined() at - line 3. 968######## 969# op.c 970use warnings 'misc' ; 971opendir FH, "." ; 972$x = 1 while $x = readdir FH and 0 ; 973no warnings 'misc' ; 974$x = 1 while $x = readdir FH and 0 ; 975closedir FH ; 976EXPECT 977Value of readdir() operator can be "0"; test with defined() at - line 4. 978######## 979# op.c 980use warnings 'misc'; 981open FH, "<abc"; 982($_ = <FH>) // ($_ = 1); 983opendir DH, "."; 984%a = (1,2,3,4) ; 985EXPECT 986######## 987# op.c 988use warnings 'redefine' ; 989sub fred {} 990sub fred {} 991sub fred { # warning should be for this line 992} 993no warnings 'redefine' ; 994sub fred {} 995sub fred { 996} 997EXPECT 998Subroutine fred redefined at - line 4. 999Subroutine fred redefined at - line 5. 1000######## 1001# op.c 1002use warnings 'redefine' ; 1003sub fred () { 1 } 1004sub fred () { 1 } 1005no warnings 'redefine' ; 1006sub fred () { 1 } 1007EXPECT 1008Constant subroutine fred redefined at - line 4. 1009######## 1010# op.c 1011sub fred () { 1 } 1012sub fred () { 2 } 1013EXPECT 1014Constant subroutine fred redefined at - line 3. 1015######## 1016# op.c 1017sub fred () { 1 } 1018*fred = sub () { 2 }; 1019EXPECT 1020Constant subroutine main::fred redefined at - line 3. 1021######## 1022# op.c 1023use feature "lexical_subs", "state"; 1024my sub fred () { 1 } 1025sub fred { 2 }; 1026my sub george { 1 } 1027sub george () { 2 } # should *not* produce redef warnings by default 1028state sub phred () { 1 } 1029sub phred { 2 }; 1030state sub jorge { 1 } 1031sub jorge () { 2 } # should *not* produce redef warnings by default 1032EXPECT 1033Prototype mismatch: sub fred () vs none at - line 4. 1034Constant subroutine fred redefined at - line 4. 1035Prototype mismatch: sub george: none vs () at - line 6. 1036Prototype mismatch: sub phred () vs none at - line 8. 1037Constant subroutine phred redefined at - line 8. 1038Prototype mismatch: sub jorge: none vs () at - line 10. 1039######## 1040# op.c 1041no warnings 'redefine' ; 1042sub fred () { 1 } 1043sub fred () { 2 } 1044EXPECT 1045######## 1046# op.c 1047no warnings 'redefine' ; 1048sub fred () { 1 } 1049*fred = sub () { 2 }; 1050EXPECT 1051######## 1052# op.c 1053use warnings 'redefine' ; 1054format FRED = 1055. 1056format FRED = 1057. 1058no warnings 'redefine' ; 1059format FRED = 1060. 1061EXPECT 1062Format FRED redefined at - line 5. 1063######## 1064# op.c 1065use warnings 'exec' ; 1066exec "$^X -e 1" ; 1067my $a 1068EXPECT 1069Statement unlikely to be reached at - line 4. 1070 (Maybe you meant system() when you said exec()?) 1071######## 1072# op.c, no warning if exec isn't a statement. 1073use warnings 'exec' ; 1074$a || exec "$^X -e 1" ; 1075my $a 1076EXPECT 1077######## 1078# op.c 1079defined(@a); 1080EXPECT 1081OPTION fatal 1082Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at - line 2. 1083######## 1084# op.c 1085my @a; defined(@a); 1086EXPECT 1087OPTION fatal 1088Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at - line 2. 1089######## 1090# op.c 1091defined(@a = (1,2,3)); 1092EXPECT 1093######## 1094# op.c 1095defined(%h); 1096EXPECT 1097OPTION fatal 1098Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at - line 2. 1099######## 1100# op.c 1101my %h; defined(%h); 1102EXPECT 1103OPTION fatal 1104Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at - line 2. 1105######## 1106# op.c 1107no warnings 'exec' ; 1108exec "$^X -e 1" ; 1109my $a 1110EXPECT 1111 1112######## 1113# op.c 1114sub fred(); 1115sub fred($) {} 1116use constant foo=>bar; sub foo(@); 1117use constant bav=>bar; sub bav(); # no warning 1118sub btu; sub btu(); 1119EXPECT 1120Prototype mismatch: sub main::fred () vs ($) at - line 3. 1121Prototype mismatch: sub foo () vs (@) at - line 4. 1122Prototype mismatch: sub btu: none vs () at - line 6. 1123######## 1124# op.c 1125use utf8; 1126use open qw( :utf8 :std ); 1127sub frèd(); 1128sub frèd($) {} 1129EXPECT 1130Prototype mismatch: sub main::frèd () vs ($) at - line 5. 1131######## 1132# op.c 1133use utf8; 1134use open qw( :utf8 :std ); 1135use warnings; 1136BEGIN { $::{"foo"} = "\x{30cb}" } 1137BEGIN { eval "sub foo {}"; } 1138EXPECT 1139Prototype mismatch: sub main::foo (ニ) vs none at (eval 1) line 1. 1140######## 1141# op.c 1142$^W = 0 ; 1143sub fred() ; 1144sub fred($) {} 1145{ 1146 no warnings 'prototype' ; 1147 sub Fred() ; 1148 sub Fred($) {} 1149 use warnings 'prototype' ; 1150 sub freD() ; 1151 sub freD($) {} 1152} 1153sub FRED() ; 1154sub FRED($) {} 1155EXPECT 1156Prototype mismatch: sub main::fred () vs ($) at - line 4. 1157Prototype mismatch: sub main::freD () vs ($) at - line 11. 1158Prototype mismatch: sub main::FRED () vs ($) at - line 14. 1159######## 1160# op.c [S_simplify_sort] 1161# [perl #86136] 1162my @tests = split /^/, ' 1163 sort {$a <=> $b} @a; 1164 sort {$a cmp $b} @a; 1165 { use integer; sort {$a <=> $b} @a} 1166 sort {$b <=> $a} @a; 1167 sort {$b cmp $a} @a; 1168 { use integer; sort {$b <=> $a} @a} 1169'; 1170for my $pragma ('use warnings "syntax";', '') { 1171 for my $vars ('', 'my $a;', 'my $b;', 'my ($a,$b);') { 1172 for my $inner_stmt ('', 'print;', 'func();') { 1173 eval "#line " . ++$line . "01 -\n$pragma\n$vars" 1174 . join "", map s/sort \{\K/$inner_stmt/r, @tests; 1175 $@ and die; 1176 } 1177 } 1178} 1179sub func{} 1180use warnings 'syntax'; 1181my $a; 1182# These used to be errors! 1183sort { ; } $a <=> $b; 1184sort { ; } $a, "<=>"; 1185sort { ; } $a, $cmp; 1186sort $a, $b if $cmpany_name; 1187sort if $a + $cmp; 1188sort @t; $a + $cmp; 1189EXPECT 1190"my $a" used in sort comparison at - line 403. 1191"my $a" used in sort comparison at - line 404. 1192"my $a" used in sort comparison at - line 405. 1193"my $a" used in sort comparison at - line 406. 1194"my $a" used in sort comparison at - line 407. 1195"my $a" used in sort comparison at - line 408. 1196"my $a" used in sort comparison at - line 503. 1197"my $a" used in sort comparison at - line 504. 1198"my $a" used in sort comparison at - line 505. 1199"my $a" used in sort comparison at - line 506. 1200"my $a" used in sort comparison at - line 507. 1201"my $a" used in sort comparison at - line 508. 1202"my $a" used in sort comparison at - line 603. 1203"my $a" used in sort comparison at - line 604. 1204"my $a" used in sort comparison at - line 605. 1205"my $a" used in sort comparison at - line 606. 1206"my $a" used in sort comparison at - line 607. 1207"my $a" used in sort comparison at - line 608. 1208"my $b" used in sort comparison at - line 703. 1209"my $b" used in sort comparison at - line 704. 1210"my $b" used in sort comparison at - line 705. 1211"my $b" used in sort comparison at - line 706. 1212"my $b" used in sort comparison at - line 707. 1213"my $b" used in sort comparison at - line 708. 1214"my $b" used in sort comparison at - line 803. 1215"my $b" used in sort comparison at - line 804. 1216"my $b" used in sort comparison at - line 805. 1217"my $b" used in sort comparison at - line 806. 1218"my $b" used in sort comparison at - line 807. 1219"my $b" used in sort comparison at - line 808. 1220"my $b" used in sort comparison at - line 903. 1221"my $b" used in sort comparison at - line 904. 1222"my $b" used in sort comparison at - line 905. 1223"my $b" used in sort comparison at - line 906. 1224"my $b" used in sort comparison at - line 907. 1225"my $b" used in sort comparison at - line 908. 1226"my $a" used in sort comparison at - line 1003. 1227"my $b" used in sort comparison at - line 1003. 1228"my $a" used in sort comparison at - line 1004. 1229"my $b" used in sort comparison at - line 1004. 1230"my $a" used in sort comparison at - line 1005. 1231"my $b" used in sort comparison at - line 1005. 1232"my $b" used in sort comparison at - line 1006. 1233"my $a" used in sort comparison at - line 1006. 1234"my $b" used in sort comparison at - line 1007. 1235"my $a" used in sort comparison at - line 1007. 1236"my $b" used in sort comparison at - line 1008. 1237"my $a" used in sort comparison at - line 1008. 1238"my $a" used in sort comparison at - line 1103. 1239"my $b" used in sort comparison at - line 1103. 1240"my $a" used in sort comparison at - line 1104. 1241"my $b" used in sort comparison at - line 1104. 1242"my $a" used in sort comparison at - line 1105. 1243"my $b" used in sort comparison at - line 1105. 1244"my $b" used in sort comparison at - line 1106. 1245"my $a" used in sort comparison at - line 1106. 1246"my $b" used in sort comparison at - line 1107. 1247"my $a" used in sort comparison at - line 1107. 1248"my $b" used in sort comparison at - line 1108. 1249"my $a" used in sort comparison at - line 1108. 1250"my $a" used in sort comparison at - line 1203. 1251"my $b" used in sort comparison at - line 1203. 1252"my $a" used in sort comparison at - line 1204. 1253"my $b" used in sort comparison at - line 1204. 1254"my $a" used in sort comparison at - line 1205. 1255"my $b" used in sort comparison at - line 1205. 1256"my $b" used in sort comparison at - line 1206. 1257"my $a" used in sort comparison at - line 1206. 1258"my $b" used in sort comparison at - line 1207. 1259"my $a" used in sort comparison at - line 1207. 1260"my $b" used in sort comparison at - line 1208. 1261"my $a" used in sort comparison at - line 1208. 1262######## 1263# op.c [S_simplify_sort] 1264use warnings 'syntax'; use 5.01; 1265state $a; 1266sort { $a <=> $b } (); 1267EXPECT 1268"state $a" used in sort comparison at - line 4. 1269######## 1270# op.c [Perl_ck_cmp] 1271use warnings 'syntax' ; 1272no warnings 'deprecated'; 1273@a = $[ < 5; 1274@a = $[ > 5; 1275@a = $[ <= 5; 1276@a = $[ >= 5; 1277@a = 42 < $[; 1278@a = 42 > $[; 1279@a = 42 <= $[; 1280@a = 42 >= $[; 1281use integer; 1282@a = $[ < 5; 1283@a = $[ > 5; 1284@a = $[ <= 5; 1285@a = $[ >= 5; 1286@a = 42 < $[; 1287@a = 42 > $[; 1288@a = 42 <= $[; 1289@a = 42 >= $[; 1290no integer; 1291@a = $[ < $5; 1292@a = $[ > $5; 1293@a = $[ <= $5; 1294@a = $[ >= $5; 1295@a = $42 < $[; 1296@a = $42 > $[; 1297@a = $42 <= $[; 1298@a = $42 >= $[; 1299use integer; 1300@a = $[ < $5; 1301@a = $[ > $5; 1302@a = $[ <= $5; 1303@a = $[ >= $5; 1304@a = $42 < $[; 1305@a = $42 > $[; 1306@a = $42 <= $[; 1307@a = $42 >= $[; 1308EXPECT 1309$[ used in numeric lt (<) (did you mean $] ?) at - line 4. 1310$[ used in numeric gt (>) (did you mean $] ?) at - line 5. 1311$[ used in numeric le (<=) (did you mean $] ?) at - line 6. 1312$[ used in numeric ge (>=) (did you mean $] ?) at - line 7. 1313$[ used in numeric lt (<) (did you mean $] ?) at - line 8. 1314$[ used in numeric gt (>) (did you mean $] ?) at - line 9. 1315$[ used in numeric le (<=) (did you mean $] ?) at - line 10. 1316$[ used in numeric ge (>=) (did you mean $] ?) at - line 11. 1317$[ used in numeric lt (<) (did you mean $] ?) at - line 13. 1318$[ used in numeric gt (>) (did you mean $] ?) at - line 14. 1319$[ used in numeric le (<=) (did you mean $] ?) at - line 15. 1320$[ used in numeric ge (>=) (did you mean $] ?) at - line 16. 1321$[ used in numeric lt (<) (did you mean $] ?) at - line 17. 1322$[ used in numeric gt (>) (did you mean $] ?) at - line 18. 1323$[ used in numeric le (<=) (did you mean $] ?) at - line 19. 1324$[ used in numeric ge (>=) (did you mean $] ?) at - line 20. 1325######## 1326# op.c [Perl_ck_length] 1327use warnings 'syntax' ; 1328length(@a); 1329length(%b); 1330length(@$c); 1331length(%$d); 1332length($a); 1333length(my %h); 1334length(my @g); 1335EXPECT 1336length() used on @a (did you mean "scalar(@a)"?) at - line 3. 1337length() used on %b (did you mean "scalar(keys %b)"?) at - line 4. 1338length() used on @array (did you mean "scalar(@array)"?) at - line 5. 1339length() used on %hash (did you mean "scalar(keys %hash)"?) at - line 6. 1340length() used on %h (did you mean "scalar(keys %h)"?) at - line 8. 1341length() used on @g (did you mean "scalar(@g)"?) at - line 9. 1342######## 1343# op.c 1344use warnings 'syntax' ; 1345join /---/, 'x', 'y', 'z'; 1346EXPECT 1347/---/ should probably be written as "---" at - line 3. 1348######## 1349# op.c 1350use utf8; 1351use open qw( :utf8 :std ); 1352use warnings 'syntax' ; 1353join /~~~/, 'x', 'y', 'z'; 1354EXPECT 1355/~~~/ should probably be written as "~~~" at - line 5. 1356######## 1357# op.c [Perl_peep] 1358use warnings 'prototype' ; 1359fred() ; 1360sub fred ($$) {} 1361no warnings 'prototype' ; 1362joe() ; 1363sub joe ($$) {} 1364EXPECT 1365main::fred() called too early to check prototype at - line 3. 1366######## 1367# op.c [Perl_newATTRSUB] 1368--FILE-- abc.pm 1369use warnings 'void' ; 1370BEGIN { $| = 1; print "in begin\n"; } 1371CHECK { print "in check\n"; } 1372INIT { print "in init\n"; } 1373END { print "in end\n"; } 1374print "in mainline\n"; 13751; 1376--FILE-- 1377use abc; 1378delete $INC{"abc.pm"}; 1379require abc; 1380do "abc.pm"; 1381EXPECT 1382in begin 1383in mainline 1384in check 1385in init 1386in begin 1387Too late to run CHECK block at abc.pm line 3. 1388Too late to run INIT block at abc.pm line 4. 1389in mainline 1390in begin 1391Too late to run CHECK block at abc.pm line 3. 1392Too late to run INIT block at abc.pm line 4. 1393in mainline 1394in end 1395in end 1396in end 1397######## 1398# op.c [Perl_newATTRSUB] 1399--FILE-- abc.pm 1400no warnings 'void' ; 1401BEGIN { $| = 1; print "in begin\n"; } 1402CHECK { print "in check\n"; } 1403INIT { print "in init\n"; } 1404END { print "in end\n"; } 1405print "in mainline\n"; 14061; 1407--FILE-- 1408BEGIN { unshift @INC, '.' } 1409require abc; 1410do "abc.pm"; 1411EXPECT 1412in begin 1413in mainline 1414in begin 1415in mainline 1416in end 1417in end 1418######## 1419# op.c 1420my @x; 1421use warnings 'syntax' ; 1422push(@x); 1423unshift(@x); 1424no warnings 'syntax' ; 1425push(@x); 1426unshift(@x); 1427EXPECT 1428Useless use of push with no values at - line 4. 1429Useless use of unshift with no values at - line 5. 1430######## 1431# op.c 1432# 20020401 mjd@plover.com at suggestion of jfriedl@yahoo.com 1433use warnings 'regexp'; 1434split /blah/g, "blah"; 1435no warnings 'regexp'; 1436split /blah/g, "blah"; 1437EXPECT 1438Use of /g modifier is meaningless in split at - line 4. 1439######## 1440use feature "bitwise"; 1441$_ = $_ | $_; 1442$_ = $_ & $_; 1443$_ = $_ ^ $_; 1444$_ = ~$_; 1445$_ = $_ |. $_; 1446$_ = $_ &. $_; 1447$_ = $_ ^. $_; 1448$_ = ~.$_; 1449$_ |= $_; 1450$_ &= $_; 1451$_ ^= $_; 1452$_ |.= $_; 1453$_ &.= $_; 1454$_ ^.= $_; 1455use warnings "experimental::bitwise"; 1456$_ = $_ | $_; 1457$_ = $_ & $_; 1458$_ = $_ ^ $_; 1459$_ = ~$_; 1460$_ = $_ |. $_; 1461$_ = $_ &. $_; 1462$_ = $_ ^. $_; 1463$_ = ~.$_; 1464$_ |= $_; 1465$_ &= $_; 1466$_ ^= $_; 1467$_ |.= $_; 1468$_ &.= $_; 1469$_ ^.= $_; 1470no warnings "experimental::bitwise"; 1471$_ = $_ | $_; 1472$_ = $_ & $_; 1473$_ = $_ ^ $_; 1474$_ = ~$_; 1475$_ = $_ |. $_; 1476$_ = $_ &. $_; 1477$_ = $_ ^. $_; 1478$_ = ~.$_; 1479$_ |= $_; 1480$_ &= $_; 1481$_ ^= $_; 1482$_ |.= $_; 1483$_ &.= $_; 1484$_ ^.= $_; 1485EXPECT 1486######## 1487# op.c 1488use warnings 'precedence'; 1489$a = $b & $c == $d; 1490$a = $b ^ $c != $d; 1491$a = $b | $c > $d; 1492$a = $b < $c & $d; 1493$a = $b >= $c ^ $d; 1494$a = $b <= $c | $d; 1495$a = $b <=> $c & $d; 1496$a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn 1497{ 1498 use experimental 'bitwise'; 1499 $a = $b & $c == $d; 1500 $a = $b ^ $c != $d; 1501 $a = $b | $c > $d; 1502 $a = $b < $c & $d; 1503 $a = $b >= $c ^ $d; 1504 $a = $b <= $c | $d; 1505 $a = $b <=> $c & $d; 1506 $a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn 1507 $a = $b &. $c == $d; 1508 $a = $b ^. $c != $d; 1509 $a = $b |. $c > $d; 1510 $a = $b < $c &. $d; 1511 $a = $b >= $c ^. $d; 1512 $a = $b <= $c |. $d; 1513 $a = $b <=> $c &. $d; 1514 $a &.= $b == $c; $a |.= $b == $c; $a ^.= $b == $c; # shouldn't warn 1515} 1516no warnings 'precedence'; 1517$a = $b & $c == $d; 1518$a = $b ^ $c != $d; 1519$a = $b | $c > $d; 1520$a = $b < $c & $d; 1521$a = $b >= $c ^ $d; 1522$a = $b <= $c | $d; 1523$a = $b <=> $c & $d; 1524{ 1525 use experimental 'bitwise'; 1526 $a = $b & $c == $d; 1527 $a = $b ^ $c != $d; 1528 $a = $b | $c > $d; 1529 $a = $b < $c & $d; 1530 $a = $b >= $c ^ $d; 1531 $a = $b <= $c | $d; 1532 $a = $b <=> $c & $d; 1533 $a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn 1534 $a = $b &. $c == $d; 1535 $a = $b ^. $c != $d; 1536 $a = $b |. $c > $d; 1537 $a = $b < $c &. $d; 1538 $a = $b >= $c ^. $d; 1539 $a = $b <= $c |. $d; 1540 $a = $b <=> $c &. $d; 1541 $a &.= $b == $c; $a |.= $b == $c; $a ^.= $b == $c; # shouldn't warn 1542} 1543EXPECT 1544Possible precedence problem on bitwise & operator at - line 3. 1545Possible precedence problem on bitwise ^ operator at - line 4. 1546Possible precedence problem on bitwise | operator at - line 5. 1547Possible precedence problem on bitwise & operator at - line 6. 1548Possible precedence problem on bitwise ^ operator at - line 7. 1549Possible precedence problem on bitwise | operator at - line 8. 1550Possible precedence problem on bitwise & operator at - line 9. 1551Possible precedence problem on bitwise & operator at - line 13. 1552Possible precedence problem on bitwise ^ operator at - line 14. 1553Possible precedence problem on bitwise | operator at - line 15. 1554Possible precedence problem on bitwise & operator at - line 16. 1555Possible precedence problem on bitwise ^ operator at - line 17. 1556Possible precedence problem on bitwise | operator at - line 18. 1557Possible precedence problem on bitwise & operator at - line 19. 1558Possible precedence problem on bitwise &. operator at - line 21. 1559Possible precedence problem on bitwise ^. operator at - line 22. 1560Possible precedence problem on bitwise |. operator at - line 23. 1561Possible precedence problem on bitwise &. operator at - line 24. 1562Possible precedence problem on bitwise ^. operator at - line 25. 1563Possible precedence problem on bitwise |. operator at - line 26. 1564Possible precedence problem on bitwise &. operator at - line 27. 1565######## 1566# op.c 1567use integer; 1568use warnings 'precedence'; 1569$a = $b & $c == $d; 1570$a = $b ^ $c != $d; 1571$a = $b | $c > $d; 1572$a = $b < $c & $d; 1573$a = $b >= $c ^ $d; 1574$a = $b <= $c | $d; 1575$a = $b <=> $c & $d; 1576no warnings 'precedence'; 1577$a = $b & $c == $d; 1578$a = $b ^ $c != $d; 1579$a = $b | $c > $d; 1580$a = $b < $c & $d; 1581$a = $b >= $c ^ $d; 1582$a = $b <= $c | $d; 1583$a = $b <=> $c & $d; 1584EXPECT 1585Possible precedence problem on bitwise & operator at - line 4. 1586Possible precedence problem on bitwise ^ operator at - line 5. 1587Possible precedence problem on bitwise | operator at - line 6. 1588Possible precedence problem on bitwise & operator at - line 7. 1589Possible precedence problem on bitwise ^ operator at - line 8. 1590Possible precedence problem on bitwise | operator at - line 9. 1591Possible precedence problem on bitwise & operator at - line 10. 1592######## 1593# op.c 1594 1595# ok => local() has desired effect; 1596# ignore=> local() silently ignored 1597 1598use warnings 'syntax'; 1599 1600local(undef); # OP_UNDEF ignore 1601sub lval : lvalue {}; 1602local(lval()); # OP_ENTERSUB 1603local($x **= 1); # OP_POW 1604local($x *= 1); # OP_MULTIPLY 1605local($x /= 1); # OP_DIVIDE 1606local($x %= 1); # OP_MODULO 1607local($x x= 1); # OP_REPEAT 1608local($x += 1); # OP_ADD 1609local($x -= 1); # OP_SUBTRACT 1610local($x .= 1); # OP_CONCAT 1611local($x <<= 1); # OP_LEFT_SHIFT 1612local($x >>= 1); # OP_RIGHT_SHIFT 1613local($x &= 1); # OP_BIT_AND 1614local($x ^= 1); # OP_BIT_XOR 1615local($x |= 1); # OP_BIT_OR 1616{ 1617 use integer; 1618 local($x *= 1); # OP_I_MULTIPLY 1619 local($x /= 1); # OP_I_DIVIDE 1620 local($x %= 1); # OP_I_MODULO 1621 local($x += 1); # OP_I_ADD 1622 local($x -= 1); # OP_I_SUBTRACT 1623} 1624local($x?$y:$z) = 1; # OP_COND_EXPR ok 1625# these two are fatal run-time errors instead 1626#local(@$a); # OP_RV2AV ok 1627#local(%$a); # OP_RV2HV ok 1628local(*a); # OP_RV2GV ok 1629local(@a[1,2]); # OP_ASLICE ok 1630local(@a{1,2}); # OP_HSLICE ok 1631local(@a = (1,2)); # OP_AASSIGN 1632local($$x); # OP_RV2SV ok 1633local($#a); # OP_AV2ARYLEN 1634local($x = 1); # OP_SASSIGN 1635local($x &&= 1); # OP_ANDASSIGN 1636local($x ||= 1); # OP_ORASSIGN 1637local($x //= 1); # OP_DORASSIGN 1638local($a[0]); # OP_AELEMFAST ok 1639 1640local(substr($x,0,1)); # OP_SUBSTR 1641local(pos($x)); # OP_POS 1642local(vec($x,0,1)); # OP_VEC 1643local($a[$b]); # OP_AELEM ok 1644local($a{$b}); # OP_HELEM ok 1645 1646no warnings 'syntax'; 1647EXPECT 1648Useless localization of subroutine entry at - line 10. 1649Useless localization of exponentiation (**) at - line 11. 1650Useless localization of multiplication (*) at - line 12. 1651Useless localization of division (/) at - line 13. 1652Useless localization of modulus (%) at - line 14. 1653Useless localization of repeat (x) at - line 15. 1654Useless localization of addition (+) at - line 16. 1655Useless localization of subtraction (-) at - line 17. 1656Useless localization of concatenation (.) or string at - line 18. 1657Useless localization of left bitshift (<<) at - line 19. 1658Useless localization of right bitshift (>>) at - line 20. 1659Useless localization of bitwise and (&) at - line 21. 1660Useless localization of bitwise xor (^) at - line 22. 1661Useless localization of bitwise or (|) at - line 23. 1662Useless localization of integer multiplication (*) at - line 26. 1663Useless localization of integer division (/) at - line 27. 1664Useless localization of integer modulus (%) at - line 28. 1665Useless localization of integer addition (+) at - line 29. 1666Useless localization of integer subtraction (-) at - line 30. 1667Useless localization of list assignment at - line 39. 1668Useless localization of array length at - line 41. 1669Useless localization of scalar assignment at - line 42. 1670Useless localization of logical and assignment (&&=) at - line 43. 1671Useless localization of logical or assignment (||=) at - line 44. 1672Useless localization of defined or assignment (//=) at - line 45. 1673Useless localization of substr at - line 48. 1674Useless localization of match position at - line 49. 1675Useless localization of vec at - line 50. 1676######## 1677# op.c 1678my $x1 if 0; 1679my @x2 if 0; 1680my %x3 if 0; 1681my ($x4) if 0; 1682my ($x5,@x6, %x7) if 0; 16830 && my $z1; 16840 && my (%z2); 1685# these shouldn't warn 1686our $x if 0; 1687our $x unless 0; 1688if (0) { my $w1 } 1689if (my $w2) { $a=1 } 1690if ($a && (my $w3 = 1)) {$a = 2} 1691 1692EXPECT 1693Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 2. 1694Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 3. 1695Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 4. 1696Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 5. 1697Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 6. 1698Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 7. 1699Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 at - line 8. 1700######## 1701# op.c 1702$[ = 1; 1703($[) = 1; 1704use warnings 'deprecated'; 1705$[ = 2; 1706($[) = 2; 1707$[ = 0; 1708no warnings 'deprecated'; 1709$[ = 3; 1710($[) = 3; 1711EXPECT 1712Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at - line 2. 1713Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at - line 3. 1714Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at - line 5. 1715Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at - line 6. 1716######## 1717# op.c 1718use warnings 'void'; 1719@x = split /y/, "z"; 1720$x = split /y/, "z"; 1721 split /y/, "z"; 1722no warnings 'void'; 1723@x = split /y/, "z"; 1724$x = split /y/, "z"; 1725 split /y/, "z"; 1726EXPECT 1727Useless use of split in void context at - line 5. 1728######## 1729# op.c 1730use warnings 'redefine' ; 1731use utf8; 1732use open qw( :utf8 :std ); 1733sub frèd {} 1734sub frèd {} 1735no warnings 'redefine' ; 1736sub frèd {} 1737EXPECT 1738Subroutine frèd redefined at - line 6. 1739######## 1740# op.c 1741use warnings 'redefine' ; 1742use utf8; 1743use open qw( :utf8 :std ); 1744sub frèd () { 1 } 1745sub frèd () { 1 } 1746no warnings 'redefine' ; 1747sub frèd () { 1 } 1748EXPECT 1749Constant subroutine frèd redefined at - line 6. 1750######## 1751# op.c 1752use utf8; 1753use open qw( :utf8 :std ); 1754sub frèd () { 1 } 1755sub frèd () { 2 } 1756EXPECT 1757Constant subroutine frèd redefined at - line 5. 1758######## 1759# op.c 1760use utf8; 1761use open qw( :utf8 :std ); 1762sub frèd () { 1 } 1763*frèd = sub () { 2 }; 1764EXPECT 1765Constant subroutine main::frèd redefined at - line 5. 1766######## 1767# op.c 1768use warnings 'redefine' ; 1769use utf8; 1770use open qw( :utf8 :std ); 1771sub ᚠርƊ {} 1772sub ᚠርƊ {} 1773no warnings 'redefine' ; 1774sub ᚠርƊ {} 1775EXPECT 1776Subroutine ᚠርƊ redefined at - line 6. 1777######## 1778# op.c 1779use warnings 'redefine' ; 1780use utf8; 1781use open qw( :utf8 :std ); 1782sub ᚠርƊ () { 1 } 1783sub ᚠርƊ () { 1 } 1784no warnings 'redefine' ; 1785sub ᚠርƊ () { 1 } 1786EXPECT 1787Constant subroutine ᚠርƊ redefined at - line 6. 1788######## 1789# op.c 1790use utf8; 1791use open qw( :utf8 :std ); 1792sub ᚠርƊ () { 1 } 1793sub ᚠርƊ () { 2 } 1794EXPECT 1795Constant subroutine ᚠርƊ redefined at - line 5. 1796######## 1797# op.c 1798use utf8; 1799use open qw( :utf8 :std ); 1800sub ᚠርƊ () { 1 } 1801*ᚠርƊ = sub () { 2 }; 1802EXPECT 1803Constant subroutine main::ᚠርƊ redefined at - line 5. 1804######## 1805# OPTION regex 1806sub DynaLoader::dl_error {}; 1807use warnings; 1808# We're testing that the warnings report the same line number: 1809eval <<'EOC' or die $@; 1810{ 1811 DynaLoader::boot_DynaLoader("DynaLoader"); 1812} 1813EOC 1814eval <<'EOC' or die $@; 1815BEGIN { 1816 DynaLoader::boot_DynaLoader("DynaLoader"); 1817} 18181 1819EOC 1820EXPECT 1821OPTION regex 1822\ASubroutine DynaLoader::dl_error redefined at \(eval 1\) line 2\. 1823?(?s).* 1824Subroutine DynaLoader::dl_error redefined at \(eval 2\) line 2\. 1825######## 1826# op.c 1827use warnings; 1828sub do_warn_1 { return $a or $b; } 1829sub do_warn_2 { return $a and $b; } 1830sub do_warn_3 { return $a xor $b; } 1831sub do_warn_4 { die $a or $b; } 1832sub do_warn_5 { die $a and $b; } 1833sub do_warn_6 { die $a xor $b; } 1834sub do_warn_7 { exit $a or $b; } 1835sub do_warn_8 { exit $a and $b; } 1836sub do_warn_9 { exit $a xor $b; } 1837 1838# Since exit is an unary operator, it is even stronger than 1839# || and &&. 1840sub do_warn_10 { exit $a || $b; } 1841sub do_warn_11 { exit $a && $b; } 1842 1843sub do_warn_12 { goto $a or $b; } 1844sub do_warn_13 { goto $a and $b; } 1845sub do_warn_14 { goto $a xor $b; } 1846sub do_warn_15 { next $a or $b while(1); } 1847sub do_warn_16 { next $a and $b while(1); } 1848sub do_warn_17 { next $a xor $b while(1); } 1849sub do_warn_18 { last $a or $b while(1); } 1850sub do_warn_19 { last $a and $b while(1); } 1851sub do_warn_20 { last $a xor $b while(1); } 1852sub do_warn_21 { redo $a or $b while(1); } 1853sub do_warn_22 { redo $a and $b while(1); } 1854sub do_warn_23 { redo $a xor $b while(1); } 1855# These get re-written to "(return/die $a) and $b" 1856sub do_warn_24 { $b if return $a; } 1857sub do_warn_25 { $b if die $a; } 1858EXPECT 1859Possible precedence issue with control flow operator at - line 3. 1860Possible precedence issue with control flow operator at - line 4. 1861Possible precedence issue with control flow operator at - line 5. 1862Possible precedence issue with control flow operator at - line 6. 1863Possible precedence issue with control flow operator at - line 7. 1864Possible precedence issue with control flow operator at - line 8. 1865Possible precedence issue with control flow operator at - line 9. 1866Possible precedence issue with control flow operator at - line 10. 1867Possible precedence issue with control flow operator at - line 11. 1868Possible precedence issue with control flow operator at - line 15. 1869Possible precedence issue with control flow operator at - line 16. 1870Possible precedence issue with control flow operator at - line 18. 1871Possible precedence issue with control flow operator at - line 19. 1872Possible precedence issue with control flow operator at - line 20. 1873Possible precedence issue with control flow operator at - line 21. 1874Possible precedence issue with control flow operator at - line 22. 1875Possible precedence issue with control flow operator at - line 23. 1876Possible precedence issue with control flow operator at - line 24. 1877Possible precedence issue with control flow operator at - line 25. 1878Possible precedence issue with control flow operator at - line 26. 1879Possible precedence issue with control flow operator at - line 27. 1880Possible precedence issue with control flow operator at - line 28. 1881Possible precedence issue with control flow operator at - line 29. 1882Possible precedence issue with control flow operator at - line 31. 1883Possible precedence issue with control flow operator at - line 32. 1884######## 1885# op.c 1886# (same as above, except these should not warn) 1887use constant FEATURE => 1; 1888use constant MISSING_FEATURE => 0; 1889 1890sub dont_warn_1 { MISSING_FEATURE and return or dont_warn_3(); } 1891sub dont_warn_2 { FEATURE || return and dont_warn_3(); } 1892sub dont_warn_3 { not FEATURE and return or dont_warn_3(); } 1893sub dont_warn_4 { !MISSING_FEATURE || return and dont_warn_3(); } 1894sub dont_warn_5 { MISSING_FEATURE and die or dont_warn_3(); } 1895sub dont_warn_6 { FEATURE || die and dont_warn_3(); } 1896sub dont_warn_7 { not FEATURE and die or dont_warn_3(); } 1897sub dont_warn_8 { !MISSING_FEATURE || die and dont_warn_3(); } 1898sub dont_warn_9 { MISSING_FEATURE and goto $a or dont_warn_3(); } 1899sub dont_warn_10 { FEATURE || goto $a and dont_warn_3(); } 1900sub dont_warn_11 { not FEATURE and goto $a or dont_warn_3(); } 1901sub dont_warn_12 { !MISSING_FEATURE || goto $a and dont_warn_3(); } 1902 1903sub dont_warn_13 { MISSING_FEATURE and exit $a or dont_warn_3(); } 1904sub dont_warn_14 { FEATURE || exit $a and dont_warn_3(); } 1905sub dont_warn_15 { not FEATURE and exit $a or dont_warn_3(); } 1906sub dont_warn_16 { !MISSING_FEATURE || exit $a and dont_warn_3(); } 1907 1908sub dont_warn_17 { MISSING_FEATURE and next or dont_warn_3() while(1); } 1909sub dont_warn_18 { FEATURE || next and dont_warn_3() while(1); } 1910sub dont_warn_19 { not FEATURE and next or dont_warn_3() while(1); } 1911sub dont_warn_20 { !MISSING_FEATURE || next and dont_warn_3() while(1); } 1912sub dont_warn_21 { MISSING_FEATURE and redo or dont_warn_3() while(1); } 1913sub dont_warn_22 { FEATURE || redo and dont_warn_3() while(1); } 1914sub dont_warn_23 { not FEATURE and redo or dont_warn_3() while(1); } 1915sub dont_warn_24 { !MISSING_FEATURE || redo and dont_warn_3() while(1); } 1916sub dont_warn_25 { MISSING_FEATURE and last or dont_warn_3() while(1); } 1917sub dont_warn_26 { FEATURE || last and dont_warn_3() while(1); } 1918sub dont_warn_27 { not FEATURE and last or dont_warn_3() while(1); } 1919sub dont_warn_28 { !MISSING_FEATURE || last and dont_warn_3() while(1); } 1920 1921# These are weird, but at least not ambiguous. 1922sub dont_warn_29 { return ($a or $b); } 1923sub dont_warn_30 { return ($a and $b); } 1924sub dont_warn_31 { return ($a xor $b); } 1925sub dont_warn_32 { die ($a or $b); } 1926sub dont_warn_33 { die ($a and $b); } 1927sub dont_warn_34 { die ($a xor $b); } 1928sub dont_warn_35 { goto ($a or $b); } 1929sub dont_warn_36 { goto ($a and $b); } 1930sub dont_warn_37 { goto ($a xor $b); } 1931sub dont_warn_38 { next ($a or $b) while(1); } 1932sub dont_warn_39 { next ($a and $b) while(1); } 1933sub dont_warn_40 { next ($a xor $b) while(1); } 1934sub dont_warn_41 { last ($a or $b) while(1); } 1935sub dont_warn_42 { last ($a and $b) while(1); } 1936sub dont_warn_43 { last ($a xor $b) while(1); } 1937sub dont_warn_44 { redo ($a or $b) while(1); } 1938sub dont_warn_45 { redo ($a and $b) while(1); } 1939sub dont_warn_46 { redo ($a xor $b) while(1); } 1940EXPECT 1941######## 1942use feature "signatures"; 1943sub aaa { 2 } 1944sub bbb ($a) { 4 } 1945$aaa = sub { 2 }; 1946$bbb = sub ($a) { 4 }; 1947EXPECT 1948The signatures feature is experimental at - line 3. 1949The signatures feature is experimental at - line 5. 1950######## 1951no warnings "experimental::signatures"; 1952use feature "signatures"; 1953sub aaa { 2 } 1954sub bbb ($a) { 4 } 1955$aaa = sub { 2 }; 1956$bbb = sub ($a) { 4 }; 1957EXPECT 1958######## 1959use warnings 'numeric'; 1960my $c = -4.5; 1961my $a = "y" x $c; 1962my $b = "y" x -3; 1963no warnings 'numeric'; 1964my $d = "y" x $c; 1965my $e = "y" x -3; 1966no warnings 'numeric'; 1967EXPECT 1968Negative repeat count does nothing at - line 3. 1969Negative repeat count does nothing at - line 4. 1970######## 1971use Config; 1972my $non_ieee_fp = ($Config{doublekind} == 9 || 1973 $Config{doublekind} == 10 || 1974 $Config{doublekind} == 11); 1975if ($non_ieee_fp) { 1976 print <<EOM ; 1977SKIPPED 1978# No inf/nan support 1979EOM 1980 exit ; 1981} 1982my $a = "inf" + 0; 1983my $b = -$a; 1984my $c = "nan" + 0; 1985use warnings 'numeric'; 1986my $x = "x" x $a; 1987my $y = "y" x $b; 1988my $z = "z" x $c; 1989no warnings 'numeric'; 1990my $x = "x" x $a; 1991my $y = "y" x $b; 1992my $z = "z" x $c; 1993no warnings 'numeric'; 1994EXPECT 1995Non-finite repeat count does nothing at - line 16. 1996Non-finite repeat count does nothing at - line 17. 1997Non-finite repeat count does nothing at - line 18. 1998######## 1999# NAME warn on stat @array 2000@foo = ("op/stat.t"); 2001stat @foo; 2002my @bar = @foo; 2003stat @bar; 2004my $ref = \@foo; 2005stat @$ref; 2006use warnings 'syntax'; 2007stat @foo; 2008stat @bar; 2009stat @$ref; 2010EXPECT 2011Array passed to stat will be coerced to a scalar (did you want stat $foo[0]?) at - line 8. 2012Array passed to stat will be coerced to a scalar (did you want stat $bar[0]?) at - line 9. 2013Array passed to stat will be coerced to a scalar at - line 10. 2014 2015######## 2016# NAME barewords and conditionals near constant folding 2017use warnings; 2018my $x1 = !a || !b; # no "in conditional" warnings 2019my $x2 = !A || !B; # warning-free, because upper-case won't clash 2020EXPECT 2021Unquoted string "a" may clash with future reserved word at - line 2. 2022Unquoted string "b" may clash with future reserved word at - line 2. 2023######## 2024# RT #6870: Odd parsing of do...for... 2025# This was really more a tokenizer bug, but it manifests as spurious warnings 2026use warnings; 2027no warnings 'reserved'; 2028$a=do xa for ax; 2029do "xa" for ax; 2030do xa for ax; 2031do xa for "ax"; 2032do xa for sin(1); 2033do xa for (sin(1)); 2034do xa for "sin"; 2035do xa for qq(sin); 2036do xa for my $a; 2037do xa for my @a; 2038EXPECT 2039######## 2040# TODO [perl #125493 2041use warnings; 2042$_="3.14159"; 2043tr/0-9/\x{6F0}-\x{6F9}/; 2044EXPECT 2045######## 2046# Useless use of concatenation should appear for any number of args 2047use warnings; 2048($a, $b, $c) = (42)x3; 2049$a.$b; 2050$a.$b.$c; 2051EXPECT 2052Useless use of concatenation (.) or string in void context at - line 4. 2053Useless use of concatenation (.) or string in void context at - line 5. 2054