1toke.c AOK 2 3 we seem to have lost a few ambiguous warnings!! 4 5 6 $a = <<; 7 Use of comma-less variable list is deprecated 8 (called 3 times via depcom) 9 10 \1 better written as $1 11 use warnings 'syntax' ; 12 s/(abc)/\1/; 13 14 warn(warn_nosemi) 15 Semicolon seems to be missing 16 $a = 1 17 &time ; 18 19 20 Reversed %c= operator 21 my $a =+ 2 ; 22 $a =- 2 ; 23 $a =* 2 ; 24 $a =% 2 ; 25 $a =& 2 ; 26 $a =. 2 ; 27 $a =^ 2 ; 28 $a =| 2 ; 29 $a =< 2 ; 30 $a =/ 2 ; 31 32 Multidimensional syntax %.*s not supported 33 my $a = $a[1,2] ; 34 35 You need to quote \"%s\"" 36 sub fred {} ; $SIG{TERM} = fred; 37 38 Scalar value %.*s better written as $%.*s" 39 @a[3] = 2; 40 @a{3} = 2; 41 42 Can't use \\%c to mean $%c in expression 43 $_ = "ab" ; s/(ab)/\1/e; 44 45 Unquoted string "abc" may clash with future reserved word at - line 3. 46 warn(warn_reserved 47 $a = abc; 48 49 Possible attempt to separate words with commas 50 @a = qw(a, b, c) ; 51 52 Possible attempt to put comments in qw() list 53 @a = qw(a b # c) ; 54 55 %s (...) interpreted as function 56 print ("") 57 printf ("") 58 sort ("") 59 60 Ambiguous use of %c{%s%s} resolved to %c%s%s 61 $a = ${time[2]} 62 $a = ${time{2}} 63 64 65 Ambiguous use of %c{%s} resolved to %c%s 66 $a = ${time} 67 sub fred {} $a = ${fred} 68 69 Misplaced _ in number 70 $a = 1_2; 71 $a = 1_2345_6; 72 73 Bareword \"%s\" refers to nonexistent package 74 $a = FRED:: ; 75 76 Ambiguous call resolved as CORE::%s(), qualify as such or use & 77 sub time {} 78 my $a = time() 79 80 Unrecognized escape \\%c passed through 81 $a = "\m" ; 82 83 Useless use of \\E. 84 $a = "abcd\E" ; 85 86 %s number > %s non-portable 87 my $a = 0b011111111111111111111111111111110 ; 88 $a = 0b011111111111111111111111111111111 ; 89 $a = 0b111111111111111111111111111111111 ; 90 $a = 0x0fffffffe ; 91 $a = 0x0ffffffff ; 92 $a = 0x1ffffffff ; 93 $a = 0037777777776 ; 94 $a = 0037777777777 ; 95 $a = 0047777777777 ; 96 97 Integer overflow in binary number 98 my $a = 0b011111111111111111111111111111110 ; 99 $a = 0b011111111111111111111111111111111 ; 100 $a = 0b111111111111111111111111111111111 ; 101 $a = 0x0fffffffe ; 102 $a = 0x0ffffffff ; 103 $a = 0x1ffffffff ; 104 $a = 0037777777776 ; 105 $a = 0037777777777 ; 106 $a = 0047777777777 ; 107 108 dump() better written as CORE::dump() 109 110 Use of /c modifier is meaningless without /g 111 112 Use of /c modifier is meaningless in s/// 113 114 Mandatory Warnings 115 ------------------ 116 Use of "%s" without parentheses is ambiguous [check_uni] 117 rand + 4 118 119 Ambiguous use of -%s resolved as -&%s() [yylex] 120 sub fred {} ; - fred ; 121 122 Precedence problem: open %.*s should be open(%.*s) [yylex] 123 open FOO || die; 124 125 Operator or semicolon missing before %c%s [yylex] 126 Ambiguous use of %c resolved as operator %c 127 *foo *foo 128 129__END__ 130# toke.c 131format STDOUT = 132@<<< @||| @>>> @>>> 133$a $b "abc" 'def' 134. 135no warnings 'deprecated' ; 136format STDOUT = 137@<<< @||| @>>> @>>> 138$a $b "abc" 'def' 139. 140EXPECT 141Use of comma-less variable list is deprecated at - line 4. 142Use of comma-less variable list is deprecated at - line 4. 143Use of comma-less variable list is deprecated at - line 4. 144######## 145# toke.c 146$a = <<; 147 148no warnings 'deprecated' ; 149$a = <<; 150 151EXPECT 152Use of bare << to mean <<"" is deprecated at - line 2. 153######## 154# toke.c 155$a =~ m/$foo/eq; 156$a =~ s/$foo/fool/seq; 157 158EXPECT 159OPTION fatal 160Unknown regexp modifier "/e" at - line 2, near "=~ " 161Unknown regexp modifier "/q" at - line 2, near "=~ " 162Unknown regexp modifier "/q" at - line 3, near "=~ " 163Execution of - aborted due to compilation errors. 164######## 165# toke.c 166use utf8; 167use open qw( :utf8 :std ); 168$a =~ m/$foo/eネq; 169$a =~ s/$foo/fool/seネq; 170 171EXPECT 172OPTION fatal 173Unknown regexp modifier "/e" at - line 4, near "=~ " 174Unknown regexp modifier "/ネ" at - line 4, near "=~ " 175Unknown regexp modifier "/q" at - line 4, near "=~ " 176Unknown regexp modifier "/ネ" at - line 5, near "=~ " 177Unknown regexp modifier "/q" at - line 5, near "=~ " 178Execution of - aborted due to compilation errors. 179######## 180# toke.c 181use warnings 'syntax' ; 182s/(abc)/\1/; 183no warnings 'syntax' ; 184s/(abc)/\1/; 185EXPECT 186\1 better written as $1 at - line 3. 187######## 188# toke.c 189use warnings 'semicolon' ; 190$a = 1 191&time ; 192no warnings 'semicolon' ; 193$a = 1 194&time ; 195EXPECT 196Semicolon seems to be missing at - line 3. 197######## 198# toke.c 199use warnings 'syntax' ; 200my $a =+ 2 ; 201$a =- 2 ; 202$a =* 2 ; 203$a =% 2 ; 204$a =& 2 ; 205$a =. 2 ; 206$a =^ 2 ; 207$a =| 2 ; 208$a =< 2 ; 209$a =/ 2 ; 210EXPECT 211Reversed += operator at - line 3. 212Reversed -= operator at - line 4. 213Reversed *= operator at - line 5. 214Reversed %= operator at - line 6. 215Reversed &= operator at - line 7. 216Reversed .= operator at - line 8. 217Reversed ^= operator at - line 9. 218Reversed |= operator at - line 10. 219Reversed <= operator at - line 11. 220syntax error at - line 8, near "=." 221syntax error at - line 9, near "=^" 222syntax error at - line 10, near "=|" 223Unterminated <> operator at - line 11. 224######## 225# toke.c 226no warnings 'syntax' ; 227my $a =+ 2 ; 228$a =- 2 ; 229$a =* 2 ; 230$a =% 2 ; 231$a =& 2 ; 232$a =. 2 ; 233$a =^ 2 ; 234$a =| 2 ; 235$a =< 2 ; 236$a =/ 2 ; 237EXPECT 238syntax error at - line 8, near "=." 239syntax error at - line 9, near "=^" 240syntax error at - line 10, near "=|" 241Unterminated <> operator at - line 11. 242######## 243# toke.c 244use warnings 'syntax' ; 245my $a = $a[1,2] ; 246no warnings 'syntax' ; 247my $a = $a[1,2] ; 248EXPECT 249Multidimensional syntax $a[1,2] not supported at - line 3. 250######## 251# toke.c 252use warnings 'syntax' ; 253sub fred {} ; $SIG{TERM} = fred; 254no warnings 'syntax' ; 255$SIG{TERM} = fred; 256EXPECT 257You need to quote "fred" at - line 3. 258######## 259# toke.c 260use utf8; 261use open qw( :utf8 :std ); 262use warnings 'syntax' ; 263sub frèd {} ; $SIG{TERM} = frèd; 264no warnings 'syntax' ; 265$SIG{TERM} = frèd; 266EXPECT 267You need to quote "frèd" at - line 5. 268######## 269# toke.c 270use utf8; 271use open qw( :utf8 :std ); 272use warnings 'syntax' ; 273sub ふれど {} ; $SIG{TERM} = ふれど; 274no warnings 'syntax' ; 275$SIG{TERM} = ふれど; 276EXPECT 277You need to quote "ふれど" at - line 5. 278######## 279# toke.c 280use warnings 'syntax' ; 281@a[3] = 2; 282@a{3} = 2; 283no warnings 'syntax' ; 284@a[3] = 2; 285@a{3} = 2; 286EXPECT 287Scalar value @a[3] better written as $a[3] at - line 3. 288Scalar value @a{3} better written as $a{3} at - line 4. 289######## 290# toke.c 291use utf8; 292use open qw( :utf8 :std ); 293use warnings 'syntax' ; 294@à[3] = 2; 295@à{3} = 2; 296no warnings 'syntax' ; 297@à[3] = 2; 298@à{3} = 2; 299EXPECT 300Scalar value @à[3] better written as $à[3] at - line 5. 301Scalar value @à{3} better written as $à{3} at - line 6. 302######## 303# toke.c 304use utf8; 305use open qw( :utf8 :std ); 306use warnings 'syntax' ; 307@ぁ[3] = 2; 308@ぁ{3} = 2; 309no warnings 'syntax' ; 310@ぁ[3] = 2; 311@ぁ{3} = 2; 312EXPECT 313Scalar value @ぁ[3] better written as $ぁ[3] at - line 5. 314Scalar value @ぁ{3} better written as $ぁ{3} at - line 6. 315######## 316# toke.c 317use warnings 'syntax' ; 318$_ = "ab" ; 319s/(ab)/\1/e; 320no warnings 'syntax' ; 321$_ = "ab" ; 322s/(ab)/\1/e; 323EXPECT 324Can't use \1 to mean $1 in expression at - line 4. 325######## 326# toke.c 327use warnings 'reserved' ; 328$a = abc; 329$a = { def 330 331=> 1 }; 332no warnings 'reserved' ; 333$a = abc; 334EXPECT 335Unquoted string "abc" may clash with future reserved word at - line 3. 336######## 337# toke.c 338use warnings 'qw' ; 339@a = qw(a, b, c) ; 340no warnings 'qw' ; 341@a = qw(a, b, c) ; 342EXPECT 343Possible attempt to separate words with commas at - line 3. 344######## 345# toke.c 346use warnings 'qw' ; 347@a = qw(a b c # #) ; 348no warnings 'qw' ; 349@a = qw(a b c # #) ; 350EXPECT 351Possible attempt to put comments in qw() list at - line 3. 352######## 353# toke.c 354use warnings 'qw' ; 355@a = qw(a, b, c # #) ; 356no warnings 'qw' ; 357@a = qw(a, b, c # #) ; 358EXPECT 359Possible attempt to separate words with commas at - line 3. 360Possible attempt to put comments in qw() list at - line 3. 361######## 362# toke.c 363use warnings 'syntax' ; 364print (""); 365print ("") and $x = 1; 366print ("") or die; 367print ("") // die; 368print (1+2) * 3 if 0; # only this one should warn 369print (1+2) if 0; 370EXPECT 371print (...) interpreted as function at - line 7. 372######## 373# toke.c 374no warnings 'syntax' ; 375print ("") 376EXPECT 377 378######## 379# toke.c 380use warnings 'syntax' ; 381printf (""); 382printf ("") . ''; 383EXPECT 384printf (...) interpreted as function at - line 4. 385######## 386# toke.c 387no warnings 'syntax' ; 388printf ("") 389EXPECT 390 391######## 392# toke.c 393use warnings 'syntax' ; 394sort (""); 395sort ("") . ''; 396EXPECT 397sort (...) interpreted as function at - line 4. 398######## 399# toke.c 400no warnings 'syntax' ; 401sort ("") 402EXPECT 403 404######## 405# toke.c 406use warnings 'ambiguous' ; 407$a = ${time[2]}; 408no warnings 'ambiguous' ; 409$a = ${time[2]}; 410EXPECT 411Ambiguous use of ${time[...]} resolved to $time[...] at - line 3. 412######## 413# toke.c 414use warnings 'ambiguous' ; 415$a = ${time{2}}; 416EXPECT 417Ambiguous use of ${time{...}} resolved to $time{...} at - line 3. 418######## 419# toke.c 420no warnings 'ambiguous' ; 421$a = ${time{2}}; 422EXPECT 423 424######## 425# toke.c 426use warnings 'ambiguous' ; 427$a = ${time} ; 428no warnings 'ambiguous' ; 429$a = ${time} ; 430EXPECT 431Ambiguous use of ${time} resolved to $time at - line 3. 432######## 433# toke.c 434use warnings 'ambiguous' ; 435sub fred {} 436$a = ${fred} ; 437no warnings 'ambiguous' ; 438$a = ${fred} ; 439EXPECT 440Ambiguous use of ${fred} resolved to $fred at - line 4. 441######## 442# toke.c 443use warnings 'syntax' ; 444$a = _123; print "$a\n"; #( 3 string) 445$a = 1_23; print "$a\n"; 446$a = 12_3; print "$a\n"; 447$a = 123_; print "$a\n"; # 6 448$a = _+123; print "$a\n"; # 7 string) 449$a = +_123; print "$a\n"; #( 8 string) 450$a = +1_23; print "$a\n"; 451$a = +12_3; print "$a\n"; 452$a = +123_; print "$a\n"; # 11 453$a = _-123; print "$a\n"; #(12 string) 454$a = -_123; print "$a\n"; #(13 string) 455$a = -1_23; print "$a\n"; 456$a = -12_3; print "$a\n"; 457$a = -123_; print "$a\n"; # 16 458$a = 123._456; print "$a\n"; # 17 459$a = 123.4_56; print "$a\n"; 460$a = 123.45_6; print "$a\n"; 461$a = 123.456_; print "$a\n"; # 20 462$a = +123._456; print "$a\n"; # 21 463$a = +123.4_56; print "$a\n"; 464$a = +123.45_6; print "$a\n"; 465$a = +123.456_; print "$a\n"; # 24 466$a = -123._456; print "$a\n"; # 25 467$a = -123.4_56; print "$a\n"; 468$a = -123.45_6; print "$a\n"; 469$a = -123.456_; print "$a\n"; # 28 470$a = 123.456E_12; printf("%.0f\n", $a); # 29 471$a = 123.456E1_2; printf("%.0f\n", $a); 472$a = 123.456E12_; printf("%.0f\n", $a); # 31 473$a = 123.456E_+12; printf("%.0f\n", $a); # 32 474$a = 123.456E+_12; printf("%.0f\n", $a); # 33 475$a = 123.456E+1_2; printf("%.0f\n", $a); 476$a = 123.456E+12_; printf("%.0f\n", $a); # 35 477$a = 123.456E_-12; print "$a\n"; # 36 478$a = 123.456E-_12; print "$a\n"; # 37 479$a = 123.456E-1_2; print "$a\n"; 480$a = 123.456E-12_; print "$a\n"; # 39 481$a = 1__23; print "$a\n"; # 40 482$a = 12.3__4; print "$a\n"; # 41 483$a = 12.34e1__2; printf("%.0f\n", $a); # 42 484no warnings 'syntax' ; 485$a = _123; print "$a\n"; 486$a = 1_23; print "$a\n"; 487$a = 12_3; print "$a\n"; 488$a = 123_; print "$a\n"; 489$a = _+123; print "$a\n"; 490$a = +_123; print "$a\n"; 491$a = +1_23; print "$a\n"; 492$a = +12_3; print "$a\n"; 493$a = +123_; print "$a\n"; 494$a = _-123; print "$a\n"; 495$a = -_123; print "$a\n"; 496$a = -1_23; print "$a\n"; 497$a = -12_3; print "$a\n"; 498$a = -123_; print "$a\n"; 499$a = 123._456; print "$a\n"; 500$a = 123.4_56; print "$a\n"; 501$a = 123.45_6; print "$a\n"; 502$a = 123.456_; print "$a\n"; 503$a = +123._456; print "$a\n"; 504$a = +123.4_56; print "$a\n"; 505$a = +123.45_6; print "$a\n"; 506$a = +123.456_; print "$a\n"; 507$a = -123._456; print "$a\n"; 508$a = -123.4_56; print "$a\n"; 509$a = -123.45_6; print "$a\n"; 510$a = -123.456_; print "$a\n"; 511$a = 123.456E_12; printf("%.0f\n", $a); 512$a = 123.456E1_2; printf("%.0f\n", $a); 513$a = 123.456E12_; printf("%.0f\n", $a); 514$a = 123.456E_+12; printf("%.0f\n", $a); 515$a = 123.456E+_12; printf("%.0f\n", $a); 516$a = 123.456E+1_2; printf("%.0f\n", $a); 517$a = 123.456E+12_; printf("%.0f\n", $a); 518$a = 123.456E_-12; print "$a\n"; 519$a = 123.456E-_12; print "$a\n"; 520$a = 123.456E-1_2; print "$a\n"; 521$a = 123.456E-12_; print "$a\n"; 522$a = 1__23; print "$a\n"; 523$a = 12.3__4; print "$a\n"; 524$a = 12.34e1__2; printf("%.0f\n", $a); 525EXPECT 526OPTIONS regex 527Misplaced _ in number at - line 6. 528Misplaced _ in number at - line 11. 529Misplaced _ in number at - line 16. 530Misplaced _ in number at - line 17. 531Misplaced _ in number at - line 20. 532Misplaced _ in number at - line 21. 533Misplaced _ in number at - line 24. 534Misplaced _ in number at - line 25. 535Misplaced _ in number at - line 28. 536Misplaced _ in number at - line 29. 537Misplaced _ in number at - line 31. 538Misplaced _ in number at - line 32. 539Misplaced _ in number at - line 33. 540Misplaced _ in number at - line 35. 541Misplaced _ in number at - line 36. 542Misplaced _ in number at - line 37. 543Misplaced _ in number at - line 39. 544Misplaced _ in number at - line 40. 545Misplaced _ in number at - line 41. 546Misplaced _ in number at - line 42. 547_123 548123 549123 550123 551123 552_123 553123 554123 555123 556-123 557-_123 558-123 559-123 560-123 561123.456 562123.456 563123.456 564123.456 565123.456 566123.456 567123.456 568123.456 569-123.456 570-123.456 571-123.456 572-123.456 573123456000000000 574123456000000000 575123456000000000 576123456000000000 577123456000000000 578123456000000000 579123456000000000 5801.23456e-0?10 5811.23456e-0?10 5821.23456e-0?10 5831.23456e-0?10 584123 58512.34 58612340000000000 587_123 588123 589123 590123 591123 592_123 593123 594123 595123 596-123 597-_123 598-123 599-123 600-123 601123.456 602123.456 603123.456 604123.456 605123.456 606123.456 607123.456 608123.456 609-123.456 610-123.456 611-123.456 612-123.456 613123456000000000 614123456000000000 615123456000000000 616123456000000000 617123456000000000 618123456000000000 619123456000000000 6201.23456e-0?10 6211.23456e-0?10 6221.23456e-0?10 6231.23456e-0?10 624123 62512.34 62612340000000000 627######## 628# toke.c 629use warnings 'bareword' ; 630#line 25 "bar" 631$a = FRED:: ; 632no warnings 'bareword' ; 633#line 25 "bar" 634$a = FRED:: ; 635EXPECT 636Bareword "FRED::" refers to nonexistent package at bar line 25. 637######## 638# toke.c 639use utf8; 640use open qw( :utf8 :std ); 641use warnings 'bareword' ; 642#line 25 "bar" 643$a = FRÈD:: ; 644no warnings 'bareword' ; 645#line 25 "bar" 646$a = FRÈD:: ; 647EXPECT 648Bareword "FRÈD::" refers to nonexistent package at bar line 25. 649######## 650# toke.c 651use utf8; 652use open qw( :utf8 :std ); 653use warnings 'bareword' ; 654#line 25 "bar" 655$a = ϞϞϞ:: ; 656no warnings 'bareword' ; 657#line 25 "bar" 658$a = ϞϞϞ:: ; 659EXPECT 660Bareword "ϞϞϞ::" refers to nonexistent package at bar line 25. 661######## 662# toke.c 663use warnings 'ambiguous' ; 664sub time {} 665my $a = time() ; 666no warnings 'ambiguous' ; 667my $b = time() ; 668EXPECT 669Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4. 670######## 671# toke.c 672use warnings ; 673eval <<'EOE'; 674# line 30 "foo" 675warn "yelp"; 676{ 677 $_ = " \x{123} " ; 678} 679EOE 680EXPECT 681yelp at foo line 30. 682######## 683# toke.c 684my $a = rand + 4 ; 685$a = rand *^H ; 686$a = rand $^H ; 687EXPECT 688Warning: Use of "rand" without parentheses is ambiguous at - line 2. 689######## 690# toke.c 691$^W = 0 ; 692my $a = rand + 4 ; 693{ 694 no warnings 'ambiguous' ; 695 $a = rand + 4 ; 696 use warnings 'ambiguous' ; 697 $a = rand + 4 ; 698} 699$a = rand + 4 ; 700EXPECT 701Warning: Use of "rand" without parentheses is ambiguous at - line 3. 702Warning: Use of "rand" without parentheses is ambiguous at - line 8. 703Warning: Use of "rand" without parentheses is ambiguous at - line 10. 704######## 705# [perl #97110] 706sub myrand(;$) { } 707sub whatever($) { } 708my $a = myrand + 4 ; 709my $b = whatever + 4 ; 710EXPECT 711Warning: Use of "myrand" without parentheses is ambiguous at - line 4. 712######## 713# toke.c 714use warnings "ambiguous"; 715print for keys %+; # should not warn 716EXPECT 717######## 718# toke.c 719sub fred {}; 720-fred ; 721sub hank : lvalue {$_} 722--hank; # This should *not* warn [perl #77240] 723EXPECT 724Ambiguous use of -fred resolved as -&fred() at - line 3. 725######## 726# toke.c 727$^W = 0 ; 728sub fred {} ; 729-fred ; 730{ 731 no warnings 'ambiguous' ; 732 -fred ; 733 use warnings 'ambiguous' ; 734 -fred ; 735} 736-fred ; 737EXPECT 738Ambiguous use of -fred resolved as -&fred() at - line 4. 739Ambiguous use of -fred resolved as -&fred() at - line 9. 740Ambiguous use of -fred resolved as -&fred() at - line 11. 741######## 742# toke.c 743use utf8; 744use open qw( :utf8 :std ); 745sub frèd {}; 746-frèd ; 747EXPECT 748Ambiguous use of -frèd resolved as -&frèd() at - line 5. 749######## 750# toke.c 751$^W = 0 ; 752use utf8; 753use open qw( :utf8 :std ); 754sub frèd {} ; 755-frèd ; 756{ 757 no warnings 'ambiguous' ; 758 -frèd ; 759 use warnings 'ambiguous' ; 760 -frèd ; 761} 762-frèd ; 763EXPECT 764Ambiguous use of -frèd resolved as -&frèd() at - line 6. 765Ambiguous use of -frèd resolved as -&frèd() at - line 11. 766Ambiguous use of -frèd resolved as -&frèd() at - line 13. 767######## 768# toke.c 769use utf8; 770use open qw( :utf8 :std ); 771sub ᒍᒘᒊ {}; 772-ᒍᒘᒊ ; 773EXPECT 774Ambiguous use of -ᒍᒘᒊ resolved as -&ᒍᒘᒊ() at - line 5. 775######## 776# toke.c 777$^W = 0 ; 778use utf8; 779use open qw( :utf8 :std ); 780sub ᒍᒘᒊ {} ; 781-ᒍᒘᒊ ; 782{ 783 no warnings 'ambiguous' ; 784 -ᒍᒘᒊ ; 785 use warnings 'ambiguous' ; 786 -ᒍᒘᒊ ; 787} 788-ᒍᒘᒊ ; 789EXPECT 790Ambiguous use of -ᒍᒘᒊ resolved as -&ᒍᒘᒊ() at - line 6. 791Ambiguous use of -ᒍᒘᒊ resolved as -&ᒍᒘᒊ() at - line 11. 792Ambiguous use of -ᒍᒘᒊ resolved as -&ᒍᒘᒊ() at - line 13. 793######## 794# toke.c 795open FOO || time; 796open local *FOO; # should be ok 797EXPECT 798Precedence problem: open FOO should be open(FOO) at - line 2. 799######## 800# toke.c 801use utf8; 802use open qw( :utf8 :std ); 803open FÒÒ || time; 804EXPECT 805Precedence problem: open FÒÒ should be open(FÒÒ) at - line 4. 806######## 807# toke.c 808use utf8; 809use open qw( :utf8 :std ); 810open ᒍOO || time; 811EXPECT 812Precedence problem: open ᒍOO should be open(ᒍOO) at - line 4. 813######## 814# toke.c (and [perl #16184]) 815open FOO => "<&0"; close FOO; 816EXPECT 817######## 818# toke.c 819$^W = 0 ; 820open FOO || time; 821{ 822 no warnings 'precedence' ; 823 open FOO || time; 824 use warnings 'precedence' ; 825 open FOO || time; 826} 827open FOO || time; 828open Foo::BAR; # this should not warn 829EXPECT 830Precedence problem: open FOO should be open(FOO) at - line 3. 831Precedence problem: open FOO should be open(FOO) at - line 8. 832Precedence problem: open FOO should be open(FOO) at - line 10. 833######## 834# toke.c 835$^W = 0 ; 836use utf8; 837use open qw( :utf8 :std ); 838open FÒÒ || time; 839{ 840 no warnings 'precedence' ; 841 open FÒÒ || time; 842 use warnings 'precedence' ; 843 open FÒÒ || time; 844} 845open FÒÒ || time; 846EXPECT 847Precedence problem: open FÒÒ should be open(FÒÒ) at - line 5. 848Precedence problem: open FÒÒ should be open(FÒÒ) at - line 10. 849Precedence problem: open FÒÒ should be open(FÒÒ) at - line 12. 850######## 851# toke.c 852use utf8; 853use open qw( :utf8 :std ); 854$^W = 0 ; 855open ᒍÒÒ || time; 856{ 857 no warnings 'precedence' ; 858 open ᒍÒÒ || time; 859 use warnings 'precedence' ; 860 open ᒍÒÒ || time; 861} 862open ᒍÒÒ || time; 863EXPECT 864Precedence problem: open ᒍÒÒ should be open(ᒍÒÒ) at - line 5. 865Precedence problem: open ᒍÒÒ should be open(ᒍÒÒ) at - line 10. 866Precedence problem: open ᒍÒÒ should be open(ᒍÒÒ) at - line 12. 867######## 868# toke.c 869$^W = 0 ; 870*foo *foo ; 871{ 872 no warnings 'ambiguous' ; 873 *foo *foo ; 874 use warnings 'ambiguous' ; 875 *foo *foo ; 876} 877*foo *foo ; 878EXPECT 879Operator or semicolon missing before *foo at - line 3. 880Ambiguous use of * resolved as operator * at - line 3. 881Operator or semicolon missing before *foo at - line 8. 882Ambiguous use of * resolved as operator * at - line 8. 883Operator or semicolon missing before *foo at - line 10. 884Ambiguous use of * resolved as operator * at - line 10. 885######## 886# toke.c 887use utf8; 888use open qw( :utf8 :std ); 889$^W = 0 ; 890*foo *foo ; 891{ 892 no warnings 'ambiguous' ; 893 *foo *foo ; 894 use warnings 'ambiguous' ; 895 *foo *foo ; 896} 897*foo *foo ; 898EXPECT 899Operator or semicolon missing before *foo at - line 5. 900Ambiguous use of * resolved as operator * at - line 5. 901Operator or semicolon missing before *foo at - line 10. 902Ambiguous use of * resolved as operator * at - line 10. 903Operator or semicolon missing before *foo at - line 12. 904Ambiguous use of * resolved as operator * at - line 12. 905######## 906# toke.c 907use warnings 'misc' ; 908my $a = "\m" ; 909no warnings 'misc' ; 910$a = "\m" ; 911EXPECT 912Unrecognized escape \m passed through at - line 3. 913######## 914# toke.c 915use warnings 'misc' ; 916my $a = "abcd\E" ; 917no warnings 'misc' ; 918$a = "abcd\E" ; 919EXPECT 920Useless use of \E at - line 3. 921######## 922# toke.c 923use warnings 'portable' ; 924my $a = 0b011111111111111111111111111111110 ; 925 $a = 0b011111111111111111111111111111111 ; 926 $a = 0b111111111111111111111111111111111 ; 927 $a = 0x0fffffffe ; 928 $a = 0x0ffffffff ; 929 $a = 0x1ffffffff ; 930 $a = 0037777777776 ; 931 $a = 0037777777777 ; 932 $a = 0047777777777 ; 933no warnings 'portable' ; 934 $a = 0b011111111111111111111111111111110 ; 935 $a = 0b011111111111111111111111111111111 ; 936 $a = 0b111111111111111111111111111111111 ; 937 $a = 0x0fffffffe ; 938 $a = 0x0ffffffff ; 939 $a = 0x1ffffffff ; 940 $a = 0037777777776 ; 941 $a = 0037777777777 ; 942 $a = 0047777777777 ; 943EXPECT 944Binary number > 0b11111111111111111111111111111111 non-portable at - line 5. 945Hexadecimal number > 0xffffffff non-portable at - line 8. 946Octal number > 037777777777 non-portable at - line 11. 947######## 948# toke.c 949use warnings 'overflow' ; 950my $a = 0b011111111111111111111111111111110 ; 951 $a = 0b011111111111111111111111111111111 ; 952 $a = 0b10000000000000000000000000000000000000000000000000000000000000000 ; 953 $a = 0x0fffffffe ; 954 $a = 0x0ffffffff ; 955 $a = 0x10000000000000000 ; 956 $a = 0037777777776 ; 957 $a = 0037777777777 ; 958 $a = 002000000000000000000000; 959no warnings 'overflow' ; 960 $a = 0b011111111111111111111111111111110 ; 961 $a = 0b011111111111111111111111111111111 ; 962 $a = 0b10000000000000000000000000000000000000000000000000000000000000000 ; 963 $a = 0x0fffffffe ; 964 $a = 0x0ffffffff ; 965 $a = 0x10000000000000000 ; 966 $a = 0037777777776 ; 967 $a = 0037777777777 ; 968 $a = 002000000000000000000000; 969EXPECT 970Integer overflow in binary number at - line 5. 971Integer overflow in hexadecimal number at - line 8. 972Integer overflow in octal number at - line 11. 973######## 974# toke.c 975BEGIN { $^C = 1; } 976use warnings 'misc'; 977dump; 978CORE::dump; 979EXPECT 980dump() better written as CORE::dump() at - line 4. 981- syntax OK 982######## 983# toke.c 984use warnings 'misc'; 985use subs qw/dump/; 986sub dump { print "no warning for overridden dump\n"; } 987dump; 988EXPECT 989no warning for overridden dump 990######## 991# toke.c 992use warnings 'ambiguous'; 993"@mjd_previously_unused_array"; 994no warnings 'ambiguous'; 995"@mjd_previously_unused_array2"; 996EXPECT 997Possible unintended interpolation of @mjd_previously_unused_array in string at - line 3. 998######## 999# toke.c 1000use utf8; 1001use open qw( :utf8 :std ); 1002use warnings 'ambiguous'; 1003"@mjd_previously_unused_àrray"; 1004no warnings 'ambiguous'; 1005"@mjd_previously_unused_àrray2"; 1006EXPECT 1007Possible unintended interpolation of @mjd_previously_unused_àrray in string at - line 5. 1008######## 1009# toke.c 1010use utf8; 1011use open qw( :utf8 :std ); 1012use warnings 'ambiguous'; 1013"@mjd_previously_unused_ぁrrぁy"; 1014no warnings 'ambiguous'; 1015"@mjd_previously_unused_ぁrrぁy2"; 1016EXPECT 1017Possible unintended interpolation of @mjd_previously_unused_ぁrrぁy in string at - line 5. 1018######## 1019# toke.c 1020# 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com 1021use warnings 'regexp'; 1022"foo" =~ /foo/c; 1023"foo" =~ /foo/cg; 1024no warnings 'regexp'; 1025"foo" =~ /foo/c; 1026"foo" =~ /foo/cg; 1027EXPECT 1028Use of /c modifier is meaningless without /g at - line 4. 1029######## 1030# toke.c 1031# 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com 1032use warnings 'regexp'; 1033$_ = "ab" ; 1034s/ab/ab/c; 1035s/ab/ab/cg; 1036no warnings 'regexp'; 1037s/ab/ab/c; 1038s/ab/ab/cg; 1039EXPECT 1040Use of /c modifier is meaningless in s/// at - line 5. 1041Use of /c modifier is meaningless in s/// at - line 6. 1042######## 1043-wa 1044# toke.c 1045# 20020414 mjd-perl-patch+@plover.com # -a flag should suppress these warnings 1046print "@F\n"; 1047EXPECT 1048 1049######## 1050-w 1051# toke.c 1052# 20020414 mjd-perl-patch+@plover.com # -a flag should suppress these warnings 1053print "@F\n"; 1054EXPECT 1055Possible unintended interpolation of @F in string at - line 4. 1056Name "main::F" used only once: possible typo at - line 4. 1057######## 1058-wa 1059# toke.c 1060# 20020414 mjd-perl-patch+@plover.com 1061EXPECT 1062 1063######## 1064# toke.c 1065# 20020414 mjd-perl-patch+@plover.com 1066# In 5.7.3, this emitted "Possible unintended interpolation" warnings 1067use warnings 'ambiguous'; 1068$s = "(@-)(@+)"; 1069EXPECT 1070 1071######## 1072# toke.c 1073# mandatory warning 1074eval q/if ($a) { } elseif ($b) { }/; 1075no warnings "syntax"; 1076eval q/if ($a) { } elseif ($b) { }/; 1077EXPECT 1078elseif should be elsif at (eval 1) line 1. 1079######## 1080# toke.c 1081# mandatory warning 1082eval q/5 6/; 1083no warnings "syntax"; 1084eval q/5 6/; 1085EXPECT 1086Number found where operator expected at (eval 1) line 1, near "5 6" 1087 (Missing operator before 6?) 1088######## 1089# toke.c 1090use warnings "syntax"; no warnings "deprecated"; 1091$_ = $a = 1; 1092$a !=~ /1/; 1093$a !=~ m#1#; 1094$a !=~/1/; 1095$a !=~ ?/?; 1096$a !=~ y/1//; 1097$a !=~ tr/1//; 1098$a !=~ s/1//; 1099$a != ~/1/; 1100no warnings "syntax"; 1101$a !=~ /1/; 1102$a !=~ m#1#; 1103$a !=~/1/; 1104$a !=~ ?/?; 1105$a !=~ y/1//; 1106$a !=~ tr/1//; 1107$a !=~ s/1//; 1108EXPECT 1109!=~ should be !~ at - line 4. 1110!=~ should be !~ at - line 5. 1111!=~ should be !~ at - line 6. 1112!=~ should be !~ at - line 7. 1113!=~ should be !~ at - line 8. 1114!=~ should be !~ at - line 9. 1115!=~ should be !~ at - line 10. 1116######## 1117# toke.c 1118our $foo :unique; 1119sub pam :locked; 1120sub glipp :locked { 1121} 1122sub whack_eth ($) : locked { 1123} 1124no warnings 'deprecated'; 1125our $bar :unique; 1126sub zapeth :locked; 1127sub ker_plop :locked { 1128} 1129sub swa_a_p ($) : locked { 1130} 1131EXPECT 1132Use of :unique is deprecated at - line 2. 1133Use of :locked is deprecated at - line 3. 1134Use of :locked is deprecated at - line 4. 1135Use of :locked is deprecated at - line 6. 1136######## 1137# toke.c 1138use warnings "syntax"; use feature 'lexical_subs'; 1139sub proto_after_array(@$); 1140sub proto_after_arref(\@$); 1141sub proto_after_arref2(\[@$]); 1142sub proto_after_arref3(\[@$]_); 1143sub proto_after_hash(%$); 1144sub proto_after_hashref(\%$); 1145sub proto_after_hashref2(\[%$]); 1146sub underscore_last_pos($_); 1147sub underscore2($_;$); 1148sub underscore_fail($_$); 1149sub underscore_after_at(@_); 1150our sub hour (@$); 1151my sub migh (@$); 1152use feature 'state'; 1153state sub estate (@$); 1154package other; 1155sub hour (@$); 1156sub migh (@$); 1157sub estate (@$); 1158no warnings "syntax"; 1159sub proto_after_array(@$); 1160sub proto_after_hash(%$); 1161sub underscore_fail($_$); 1162EXPECT 1163Prototype after '@' for main::proto_after_array : @$ at - line 3. 1164Prototype after '%' for main::proto_after_hash : %$ at - line 7. 1165Illegal character after '_' in prototype for main::underscore_fail : $_$ at - line 12. 1166Prototype after '@' for main::underscore_after_at : @_ at - line 13. 1167The lexical_subs feature is experimental at - line 14. 1168Prototype after '@' for hour : @$ at - line 14. 1169The lexical_subs feature is experimental at - line 15. 1170Prototype after '@' for migh : @$ at - line 15. 1171The lexical_subs feature is experimental at - line 17. 1172Prototype after '@' for estate : @$ at - line 17. 1173Prototype after '@' for hour : @$ at - line 19. 1174Prototype after '@' for migh : @$ at - line 20. 1175Prototype after '@' for estate : @$ at - line 21. 1176######## 1177# toke.c 1178use warnings "ambiguous"; 1179"foo\nn" =~ /^foo$\n/; 1180"foo\nn" =~ /^foo${\}n/; 1181my $foo = qr/^foo$\n/; 1182my $bar = qr/^foo${\}n/; 1183no warnings "ambiguous"; 1184"foo\nn" =~ /^foo$\n/; 1185"foo\nn" =~ /^foo${\}n/; 1186my $foo = qr/^foo$\n/; 1187my $bar = qr/^foo${\}n/; 1188EXPECT 1189Possible unintended interpolation of $\ in regex at - line 3. 1190Possible unintended interpolation of $\ in regex at - line 5. 1191######## 1192# toke.c 1193use warnings 'syntax' ; 1194my $a = "\o"; 1195my $a = "\o{"; 1196my $a = "\o{}"; 1197no warnings 'syntax' ; 1198my $a = "\o"; 1199my $a = "\o{"; 1200my $a = "\o{}"; 1201EXPECT 1202Missing braces on \o{} at - line 3, within string 1203Missing right brace on \o{ at - line 4, within string 1204Number with no digits at - line 5, within string 1205BEGIN not safe after errors--compilation aborted at - line 6. 1206######## 1207# toke.c 1208use warnings 'digit' ; 1209my $a = "\o{1238456}"; 1210no warnings 'digit' ; 1211my $a = "\o{1238456}"; 1212EXPECT 1213Non-octal character '8'. Resolved as "\o{123}" at - line 3. 1214######## 1215# toke.c 1216use warnings; 1217my $a = "foo"; 1218print $a =~ ?f? ? "yes\n" : "no\n" foreach 0..2; 1219EXPECT 1220Use of ?PATTERN? without explicit operator is deprecated at - line 4. 1221yes 1222no 1223no 1224######## 1225# toke.c 1226use warnings; 1227my $a = "\c{ack}"; 1228$a = "\c,"; 1229$a = "\c`"; 1230no warnings 'syntax'; 1231$a = "\c{ack}"; 1232$a = "\c,"; 1233$a = "\c`"; 1234no warnings 'deprecated'; 1235EXPECT 1236"\c{" is deprecated and is more clearly written as ";" at - line 3. 1237"\c," is more clearly written simply as "l" at - line 4. 1238"\c`" is more clearly written simply as "\ " at - line 5. 1239"\c{" is deprecated and is more clearly written as ";" at - line 7. 1240######## 1241# toke.c 1242use warnings 'syntax' ; 1243my $a = qr/foo/du; 1244$a = qr/foo/lai; 1245$a = qr/foo/lil; 1246$a = qr/foo/aia; 1247$a = qr/foo/aaia; 1248no warnings 'syntax' ; 1249my $a = qr/foo/du; 1250EXPECT 1251Regexp modifiers "/d" and "/u" are mutually exclusive at - line 3, near "= " 1252Regexp modifiers "/l" and "/a" are mutually exclusive at - line 4, near "= " 1253Regexp modifier "/l" may not appear twice at - line 5, near "= " 1254Regexp modifier "/a" may appear a maximum of twice at - line 7, near "= " 1255BEGIN not safe after errors--compilation aborted at - line 8. 1256######## 1257# toke.c 1258# [perl #4362] 1259eval "print q\xabfoo"; 1260print "ok\n" if 1261 $@ =~ /Can't find string terminator "\xab" anywhere before EOF/; 1262EXPECT 1263ok 1264######## 1265# toke.c 1266use utf8; 1267use open qw( :utf8 :std ); 1268use warnings 'ambiguous' ; 1269sub frèd {} 1270$a = ${frèd} ; 1271no warnings 'ambiguous' ; 1272$a = ${frèd} ; 1273EXPECT 1274Ambiguous use of ${frèd} resolved to $frèd at - line 6. 1275######## 1276# toke.c 1277use utf8; 1278use open qw( :utf8 :std ); 1279use warnings 'ambiguous' ; 1280sub f렏 {} 1281$a = ${f렏} ; 1282no warnings 'ambiguous' ; 1283$a = ${f렏} ; 1284EXPECT 1285Ambiguous use of ${f렏} resolved to $f렏 at - line 6. 1286######## 1287# toke.c 1288use utf8; 1289use open qw( :utf8 :std ); 1290use warnings; 1291CORE::렏; 1292EXPECT 1293CORE::렏 is not a keyword at - line 5. 1294######## 1295# toke.c 1296# [perl #16249] 1297print ''; 1298eval this_method_is_fake (); 1299EXPECT 1300Undefined subroutine &main::this_method_is_fake called at - line 4. 1301######## 1302# toke.c 1303# [perl #107002] Erroneous ambiguity warnings 1304sub { # do not actually call require 1305 require a::b . 1; # These used to produce erroneous 1306 require a::b + 1; # ambiguity warnings. 1307} 1308EXPECT 1309######## 1310# toke.c 1311# [perl #113094] 1312print "aa" =~ m{^a\{1,2\}$}, "\n"; 1313print "aa" =~ m{^a\x\{61\}$}, "\n"; 1314print "aa" =~ m{^a{1,2}$}, "\n"; 1315print "aq" =~ m[^a\[a-z\]$], "\n"; 1316print "aq" =~ m(^a\(q\)$), "\n"; 1317no warnings 'deprecated'; 1318print "aa" =~ m{^a\{1,2\}$}, "\n"; 1319print "aa" =~ m{^a\x\{61\}$}, "\n"; 1320print "aq" =~ m[^a\[a-z\]$], "\n"; 1321print "aq" =~ m(^a\(q\)$), "\n"; 1322EXPECT 1323Useless use of '\'; doesn't escape metacharacter '{' at - line 3. 1324Useless use of '\'; doesn't escape metacharacter '{' at - line 4. 1325Useless use of '\'; doesn't escape metacharacter '[' at - line 6. 1326Useless use of '\'; doesn't escape metacharacter '(' at - line 7. 13271 13281 13291 13301 1331q 13321 13331 13341 1335q 1336