This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
toke.c: 'You need to quote %s' cleanup.
[perl5.git] / t / lib / warnings / toke
1 toke.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 
131 format STDOUT =
132 @<<<  @|||  @>>>  @>>>
133 $a    $b    "abc" 'def'
134 .
135 no warnings 'deprecated' ;
136 format STDOUT =
137 @<<<  @|||  @>>>  @>>>
138 $a    $b    "abc" 'def'
139 .
140 EXPECT
141 Use of comma-less variable list is deprecated at - line 4.
142 Use of comma-less variable list is deprecated at - line 4.
143 Use of comma-less variable list is deprecated at - line 4.
144 ########
145 # toke.c
146 $a =~ m/$foo/sand $bar;
147 $a =~ s/$foo/fool/sand $bar;
148 $a = <<;
149
150 no warnings 'deprecated' ;
151 $a =~ m/$foo/sand $bar;
152 $a =~ s/$foo/fool/sand $bar;
153 $a = <<;
154
155 EXPECT
156 Having no space between pattern and following word is deprecated at - line 2.
157 Having no space between pattern and following word is deprecated at - line 3.
158 Use of bare << to mean <<"" is deprecated at - line 4.
159 ########
160 # toke.c
161 use warnings 'syntax' ;
162 s/(abc)/\1/;
163 no warnings 'syntax' ;
164 s/(abc)/\1/;
165 EXPECT
166 \1 better written as $1 at - line 3.
167 ########
168 # toke.c
169 use warnings 'semicolon' ;
170 $a = 1
171 &time ;
172 no warnings 'semicolon' ;
173 $a = 1
174 &time ;
175 EXPECT
176 Semicolon seems to be missing at - line 3.
177 ########
178 # toke.c
179 use warnings 'syntax' ;
180 my $a =+ 2 ;
181 $a =- 2 ;
182 $a =* 2 ;
183 $a =% 2 ;
184 $a =& 2 ;
185 $a =. 2 ;
186 $a =^ 2 ;
187 $a =| 2 ;
188 $a =< 2 ;
189 $a =/ 2 ;
190 EXPECT
191 Reversed += operator at - line 3.
192 Reversed -= operator at - line 4.
193 Reversed *= operator at - line 5.
194 Reversed %= operator at - line 6.
195 Reversed &= operator at - line 7.
196 Reversed .= operator at - line 8.
197 Reversed ^= operator at - line 9.
198 Reversed |= operator at - line 10.
199 Reversed <= operator at - line 11.
200 syntax error at - line 8, near "=."
201 syntax error at - line 9, near "=^"
202 syntax error at - line 10, near "=|"
203 Unterminated <> operator at - line 11.
204 ########
205 # toke.c
206 no warnings 'syntax' ;
207 my $a =+ 2 ;
208 $a =- 2 ;
209 $a =* 2 ;
210 $a =% 2 ;
211 $a =& 2 ;
212 $a =. 2 ;
213 $a =^ 2 ;
214 $a =| 2 ;
215 $a =< 2 ;
216 $a =/ 2 ;
217 EXPECT
218 syntax error at - line 8, near "=."
219 syntax error at - line 9, near "=^"
220 syntax error at - line 10, near "=|"
221 Unterminated <> operator at - line 11.
222 ########
223 # toke.c
224 use warnings 'syntax' ;
225 my $a = $a[1,2] ;
226 no warnings 'syntax' ;
227 my $a = $a[1,2] ;
228 EXPECT
229 Multidimensional syntax $a[1,2] not supported at - line 3.
230 ########
231 # toke.c
232 use warnings 'syntax' ;
233 sub fred {} ; $SIG{TERM} = fred;
234 no warnings 'syntax' ;
235 $SIG{TERM} = fred;
236 EXPECT
237 You need to quote "fred" at - line 3.
238 ########
239 # toke.c
240 use utf8;
241 use open qw( :utf8 :std );
242 use warnings 'syntax' ;
243 sub frèd {} ; $SIG{TERM} = frèd;
244 no warnings 'syntax' ;
245 $SIG{TERM} = frèd;
246 EXPECT
247 You need to quote "frèd" at - line 5.
248 ########
249 # toke.c
250 use utf8;
251 use open qw( :utf8 :std );
252 use warnings 'syntax' ;
253 sub ふれど {} ; $SIG{TERM} = ふれど;
254 no warnings 'syntax' ;
255 $SIG{TERM} = ふれど;
256 EXPECT
257 You need to quote "ふれど" at - line 5.
258 ########
259 # toke.c
260 use warnings 'syntax' ;
261 @a[3] = 2;
262 @a{3} = 2;
263 no warnings 'syntax' ;
264 @a[3] = 2;
265 @a{3} = 2;
266 EXPECT
267 Scalar value @a[3] better written as $a[3] at - line 3.
268 Scalar value @a{3} better written as $a{3} at - line 4.
269 ########
270 # toke.c
271 use warnings 'syntax' ;
272 $_ = "ab" ; 
273 s/(ab)/\1/e;
274 no warnings 'syntax' ;
275 $_ = "ab" ; 
276 s/(ab)/\1/e;
277 EXPECT
278 Can't use \1 to mean $1 in expression at - line 4.
279 ########
280 # toke.c
281 use warnings 'reserved' ;
282 $a = abc;
283 $a = { def
284
285 => 1 };
286 no warnings 'reserved' ;
287 $a = abc;
288 EXPECT
289 Unquoted string "abc" may clash with future reserved word at - line 3.
290 ########
291 # toke.c
292 use warnings 'qw' ;
293 @a = qw(a, b, c) ;
294 no warnings 'qw' ;
295 @a = qw(a, b, c) ;
296 EXPECT
297 Possible attempt to separate words with commas at - line 3.
298 ########
299 # toke.c
300 use warnings 'qw' ;
301 @a = qw(a b c # #) ;
302 no warnings 'qw' ;
303 @a = qw(a b c # #) ;
304 EXPECT
305 Possible attempt to put comments in qw() list at - line 3.
306 ########
307 # toke.c
308 use warnings 'qw' ;
309 @a = qw(a, b, c # #) ;
310 no warnings 'qw' ;
311 @a = qw(a, b, c # #) ;
312 EXPECT
313 Possible attempt to separate words with commas at - line 3.
314 Possible attempt to put comments in qw() list at - line 3.
315 ########
316 # toke.c
317 use warnings 'syntax' ;
318 print ("");
319 print ("") and $x = 1;
320 print ("") or die;
321 print ("") // die;
322 print (1+2) * 3 if 0; # only this one should warn
323 print (1+2) if 0;
324 EXPECT
325 print (...) interpreted as function at - line 7.
326 ########
327 # toke.c
328 no warnings 'syntax' ;
329 print ("")
330 EXPECT
331
332 ########
333 # toke.c
334 use warnings 'syntax' ;
335 printf ("");
336 printf ("") . '';
337 EXPECT
338 printf (...) interpreted as function at - line 4.
339 ########
340 # toke.c
341 no warnings 'syntax' ;
342 printf ("")
343 EXPECT
344
345 ########
346 # toke.c
347 use warnings 'syntax' ;
348 sort ("");
349 sort ("") . '';
350 EXPECT
351 sort (...) interpreted as function at - line 4.
352 ########
353 # toke.c
354 no warnings 'syntax' ;
355 sort ("")
356 EXPECT
357
358 ########
359 # toke.c
360 use warnings 'ambiguous' ;
361 $a = ${time[2]};
362 no warnings 'ambiguous' ;
363 $a = ${time[2]};
364 EXPECT
365 Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
366 ########
367 # toke.c
368 use warnings 'ambiguous' ;
369 $a = ${time{2}};
370 EXPECT
371 Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
372 ########
373 # toke.c
374 no warnings 'ambiguous' ;
375 $a = ${time{2}};
376 EXPECT
377
378 ########
379 # toke.c
380 use warnings 'ambiguous' ;
381 $a = ${time} ;
382 no warnings 'ambiguous' ;
383 $a = ${time} ;
384 EXPECT
385 Ambiguous use of ${time} resolved to $time at - line 3.
386 ########
387 # toke.c
388 use warnings 'ambiguous' ;
389 sub fred {}
390 $a = ${fred} ;
391 no warnings 'ambiguous' ;
392 $a = ${fred} ;
393 EXPECT
394 Ambiguous use of ${fred} resolved to $fred at - line 4.
395 ########
396 # toke.c
397 use warnings 'syntax' ;
398 $a = _123; print "$a\n";                #( 3    string)
399 $a = 1_23; print "$a\n";
400 $a = 12_3; print "$a\n";
401 $a = 123_; print "$a\n";                #  6
402 $a = _+123; print "$a\n";               #  7    string)
403 $a = +_123; print "$a\n";               #( 8    string)
404 $a = +1_23; print "$a\n";
405 $a = +12_3; print "$a\n";
406 $a = +123_; print "$a\n";               # 11
407 $a = _-123; print "$a\n";               #(12    string)
408 $a = -_123; print "$a\n";               #(13    string)
409 $a = -1_23; print "$a\n";
410 $a = -12_3; print "$a\n";
411 $a = -123_; print "$a\n";               # 16
412 $a = 123._456; print "$a\n";            # 17
413 $a = 123.4_56; print "$a\n";
414 $a = 123.45_6; print "$a\n";
415 $a = 123.456_; print "$a\n";            # 20
416 $a = +123._456; print "$a\n";           # 21
417 $a = +123.4_56; print "$a\n";   
418 $a = +123.45_6; print "$a\n";   
419 $a = +123.456_; print "$a\n";           # 24
420 $a = -123._456; print "$a\n";           # 25
421 $a = -123.4_56; print "$a\n";   
422 $a = -123.45_6; print "$a\n";
423 $a = -123.456_; print "$a\n";           # 28
424 $a = 123.456E_12; printf("%.0f\n", $a); # 29
425 $a = 123.456E1_2; printf("%.0f\n", $a);
426 $a = 123.456E12_; printf("%.0f\n", $a); # 31
427 $a = 123.456E_+12; printf("%.0f\n", $a);        # 32
428 $a = 123.456E+_12; printf("%.0f\n", $a);        # 33
429 $a = 123.456E+1_2; printf("%.0f\n", $a);
430 $a = 123.456E+12_; printf("%.0f\n", $a);        # 35
431 $a = 123.456E_-12; print "$a\n";        # 36
432 $a = 123.456E-_12; print "$a\n";        # 37
433 $a = 123.456E-1_2; print "$a\n";
434 $a = 123.456E-12_; print "$a\n";        # 39
435 $a = 1__23; print "$a\n";               # 40
436 $a = 12.3__4; print "$a\n";             # 41
437 $a = 12.34e1__2; printf("%.0f\n", $a);  # 42
438 no warnings 'syntax' ;
439 $a = _123; print "$a\n";
440 $a = 1_23; print "$a\n";
441 $a = 12_3; print "$a\n";
442 $a = 123_; print "$a\n";
443 $a = _+123; print "$a\n";
444 $a = +_123; print "$a\n";
445 $a = +1_23; print "$a\n";
446 $a = +12_3; print "$a\n";
447 $a = +123_; print "$a\n";
448 $a = _-123; print "$a\n";
449 $a = -_123; print "$a\n";
450 $a = -1_23; print "$a\n";
451 $a = -12_3; print "$a\n";
452 $a = -123_; print "$a\n";
453 $a = 123._456; print "$a\n";
454 $a = 123.4_56; print "$a\n";
455 $a = 123.45_6; print "$a\n";
456 $a = 123.456_; print "$a\n";
457 $a = +123._456; print "$a\n";
458 $a = +123.4_56; print "$a\n";
459 $a = +123.45_6; print "$a\n";
460 $a = +123.456_; print "$a\n";
461 $a = -123._456; print "$a\n";
462 $a = -123.4_56; print "$a\n";
463 $a = -123.45_6; print "$a\n";
464 $a = -123.456_; print "$a\n";
465 $a = 123.456E_12; printf("%.0f\n", $a);
466 $a = 123.456E1_2; printf("%.0f\n", $a);
467 $a = 123.456E12_; printf("%.0f\n", $a);
468 $a = 123.456E_+12; printf("%.0f\n", $a);
469 $a = 123.456E+_12; printf("%.0f\n", $a);
470 $a = 123.456E+1_2; printf("%.0f\n", $a);
471 $a = 123.456E+12_; printf("%.0f\n", $a);
472 $a = 123.456E_-12; print "$a\n";
473 $a = 123.456E-_12; print "$a\n";
474 $a = 123.456E-1_2; print "$a\n";
475 $a = 123.456E-12_; print "$a\n";
476 $a = 1__23; print "$a\n";
477 $a = 12.3__4; print "$a\n";
478 $a = 12.34e1__2; printf("%.0f\n", $a);
479 EXPECT
480 OPTIONS regex
481 Misplaced _ in number at - line 6.
482 Misplaced _ in number at - line 11.
483 Misplaced _ in number at - line 16.
484 Misplaced _ in number at - line 17.
485 Misplaced _ in number at - line 20.
486 Misplaced _ in number at - line 21.
487 Misplaced _ in number at - line 24.
488 Misplaced _ in number at - line 25.
489 Misplaced _ in number at - line 28.
490 Misplaced _ in number at - line 29.
491 Misplaced _ in number at - line 31.
492 Misplaced _ in number at - line 32.
493 Misplaced _ in number at - line 33.
494 Misplaced _ in number at - line 35.
495 Misplaced _ in number at - line 36.
496 Misplaced _ in number at - line 37.
497 Misplaced _ in number at - line 39.
498 Misplaced _ in number at - line 40.
499 Misplaced _ in number at - line 41.
500 Misplaced _ in number at - line 42.
501 _123
502 123
503 123
504 123
505 123
506 _123
507 123
508 123
509 123
510 -123
511 -_123
512 -123
513 -123
514 -123
515 123.456
516 123.456
517 123.456
518 123.456
519 123.456
520 123.456
521 123.456
522 123.456
523 -123.456
524 -123.456
525 -123.456
526 -123.456
527 123456000000000
528 123456000000000
529 123456000000000
530 123456000000000
531 123456000000000
532 123456000000000
533 123456000000000
534 1.23456e-0?10
535 1.23456e-0?10
536 1.23456e-0?10
537 1.23456e-0?10
538 123
539 12.34
540 12340000000000
541 _123
542 123
543 123
544 123
545 123
546 _123
547 123
548 123
549 123
550 -123
551 -_123
552 -123
553 -123
554 -123
555 123.456
556 123.456
557 123.456
558 123.456
559 123.456
560 123.456
561 123.456
562 123.456
563 -123.456
564 -123.456
565 -123.456
566 -123.456
567 123456000000000
568 123456000000000
569 123456000000000
570 123456000000000
571 123456000000000
572 123456000000000
573 123456000000000
574 1.23456e-0?10
575 1.23456e-0?10
576 1.23456e-0?10
577 1.23456e-0?10
578 123
579 12.34
580 12340000000000
581 ########
582 # toke.c
583 use warnings 'bareword' ;
584 #line 25 "bar"
585 $a = FRED:: ;
586 no warnings 'bareword' ;
587 #line 25 "bar"
588 $a = FRED:: ;
589 EXPECT
590 Bareword "FRED::" refers to nonexistent package at bar line 25.
591 ########
592 # toke.c
593 use warnings 'ambiguous' ;
594 sub time {}
595 my $a = time() ;
596 no warnings 'ambiguous' ;
597 my $b = time() ;
598 EXPECT
599 Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4.
600 ########
601 # toke.c
602 use warnings ;
603 eval <<'EOE';
604 #  line 30 "foo"
605 warn "yelp";
606 {
607   $_ = " \x{123} " ;
608 }
609 EOE
610 EXPECT
611 yelp at foo line 30.
612 ########
613 # toke.c
614 my $a = rand + 4 ;
615 EXPECT
616 Warning: Use of "rand" without parentheses is ambiguous at - line 2.
617 ########
618 # toke.c
619 $^W = 0 ;
620 my $a = rand + 4 ;
621 {
622     no warnings 'ambiguous' ;
623     $a = rand + 4 ;
624     use warnings 'ambiguous' ;
625     $a = rand + 4 ;
626 }
627 $a = rand + 4 ;
628 EXPECT
629 Warning: Use of "rand" without parentheses is ambiguous at - line 3.
630 Warning: Use of "rand" without parentheses is ambiguous at - line 8.
631 Warning: Use of "rand" without parentheses is ambiguous at - line 10.
632 ########
633 # [perl #97110]
634 sub myrand(;$) { }
635 sub whatever($) { }
636 my $a = myrand + 4 ;
637 my $b = whatever + 4 ;
638 EXPECT
639 Warning: Use of "myrand" without parentheses is ambiguous at - line 4.
640 ########
641 # toke.c
642 use warnings "ambiguous";
643 print for keys %+; # should not warn
644 EXPECT
645 ########
646 # toke.c
647 sub fred {};
648 -fred ;
649 EXPECT
650 Ambiguous use of -fred resolved as -&fred() at - line 3.
651 ########
652 # toke.c
653 $^W = 0 ;
654 sub fred {} ;
655 -fred ;
656 {
657     no warnings 'ambiguous' ;
658     -fred ;
659     use warnings 'ambiguous' ;
660     -fred ;
661 }
662 -fred ;
663 EXPECT
664 Ambiguous use of -fred resolved as -&fred() at - line 4.
665 Ambiguous use of -fred resolved as -&fred() at - line 9.
666 Ambiguous use of -fred resolved as -&fred() at - line 11.
667 ########
668 # toke.c
669 open FOO || time;
670 open local *FOO; # should be ok
671 EXPECT
672 Precedence problem: open FOO should be open(FOO) at - line 2.
673 ########
674 # toke.c (and [perl #16184])
675 open FOO => "<&0"; close FOO;
676 EXPECT
677 ########
678 # toke.c
679 $^W = 0 ;
680 open FOO || time;
681 {
682     no warnings 'precedence' ;
683     open FOO || time;
684     use warnings 'precedence' ;
685     open FOO || time;
686 }
687 open FOO || time;
688 open Foo::BAR; # this should not warn
689 EXPECT
690 Precedence problem: open FOO should be open(FOO) at - line 3.
691 Precedence problem: open FOO should be open(FOO) at - line 8.
692 Precedence problem: open FOO should be open(FOO) at - line 10.
693 ########
694 # toke.c
695 $^W = 0 ;
696 *foo *foo ;
697 {
698     no warnings 'ambiguous' ;
699     *foo *foo ;
700     use warnings 'ambiguous' ;
701     *foo *foo ;
702 }
703 *foo *foo ;
704 EXPECT
705 Operator or semicolon missing before *foo at - line 3.
706 Ambiguous use of * resolved as operator * at - line 3.
707 Operator or semicolon missing before *foo at - line 8.
708 Ambiguous use of * resolved as operator * at - line 8.
709 Operator or semicolon missing before *foo at - line 10.
710 Ambiguous use of * resolved as operator * at - line 10.
711 ########
712 # toke.c
713 use warnings 'misc' ;
714 my $a = "\m" ;
715 no warnings 'misc' ;
716 $a = "\m" ;
717 EXPECT
718 Unrecognized escape \m passed through at - line 3.
719 ########
720 # toke.c
721 use warnings 'misc' ;
722 my $a = "abcd\E" ;
723 no warnings 'misc' ;
724 $a = "abcd\E" ;
725 EXPECT
726 Useless use of \E at - line 3.
727 ########
728 # toke.c
729 use warnings 'portable' ;
730 my $a =  0b011111111111111111111111111111110 ;
731    $a =  0b011111111111111111111111111111111 ;
732    $a =  0b111111111111111111111111111111111 ;
733    $a =  0x0fffffffe ;
734    $a =  0x0ffffffff ;
735    $a =  0x1ffffffff ;
736    $a =  0037777777776 ;
737    $a =  0037777777777 ;
738    $a =  0047777777777 ;
739 no warnings 'portable' ;
740    $a =  0b011111111111111111111111111111110 ;
741    $a =  0b011111111111111111111111111111111 ;
742    $a =  0b111111111111111111111111111111111 ;
743    $a =  0x0fffffffe ;
744    $a =  0x0ffffffff ;
745    $a =  0x1ffffffff ;
746    $a =  0037777777776 ;
747    $a =  0037777777777 ;
748    $a =  0047777777777 ;
749 EXPECT
750 Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
751 Hexadecimal number > 0xffffffff non-portable at - line 8.
752 Octal number > 037777777777 non-portable at - line 11.
753 ########
754 # toke.c
755 use warnings 'overflow' ;
756 my $a =  0b011111111111111111111111111111110 ;
757    $a =  0b011111111111111111111111111111111 ;
758    $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
759    $a =  0x0fffffffe ;
760    $a =  0x0ffffffff ;
761    $a =  0x10000000000000000 ;
762    $a =  0037777777776 ;
763    $a =  0037777777777 ;
764    $a =  002000000000000000000000;
765 no warnings 'overflow' ;
766    $a =  0b011111111111111111111111111111110 ;
767    $a =  0b011111111111111111111111111111111 ;
768    $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
769    $a =  0x0fffffffe ;
770    $a =  0x0ffffffff ;
771    $a =  0x10000000000000000 ;
772    $a =  0037777777776 ;
773    $a =  0037777777777 ;
774    $a =  002000000000000000000000;
775 EXPECT
776 Integer overflow in binary number at - line 5.
777 Integer overflow in hexadecimal number at - line 8.
778 Integer overflow in octal number at - line 11.
779 ########
780 # toke.c
781 BEGIN { $^C = 1; }
782 use warnings 'misc';
783 dump;
784 CORE::dump;
785 EXPECT
786 dump() better written as CORE::dump() at - line 4.
787 - syntax OK
788 ########
789 # toke.c
790 use warnings 'misc';
791 use subs qw/dump/;
792 sub dump { print "no warning for overridden dump\n"; }
793 dump;
794 EXPECT
795 no warning for overridden dump
796 ########
797 # toke.c
798 use warnings 'ambiguous';
799 "@mjd_previously_unused_array";        
800 no warnings 'ambiguous';
801 "@mjd_previously_unused_array";        
802 EXPECT
803 Possible unintended interpolation of @mjd_previously_unused_array in string at - line 3.
804 ########
805 # toke.c
806 # 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com
807 use warnings 'regexp';
808 "foo" =~ /foo/c;
809 "foo" =~ /foo/cg;
810 no warnings 'regexp';
811 "foo" =~ /foo/c;
812 "foo" =~ /foo/cg;
813 EXPECT
814 Use of /c modifier is meaningless without /g at - line 4.
815 ########
816 # toke.c
817 # 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com
818 use warnings 'regexp';
819 $_ = "ab" ; 
820 s/ab/ab/c;
821 s/ab/ab/cg;
822 no warnings 'regexp';
823 s/ab/ab/c;
824 s/ab/ab/cg;
825 EXPECT
826 Use of /c modifier is meaningless in s/// at - line 5.
827 Use of /c modifier is meaningless in s/// at - line 6.
828 ########
829 -wa
830 # toke.c
831 # 20020414 mjd-perl-patch+@plover.com # -a flag should suppress these warnings
832 print "@F\n";
833 EXPECT
834
835 ########
836 -w
837 # toke.c
838 # 20020414 mjd-perl-patch+@plover.com # -a flag should suppress these warnings
839 print "@F\n";
840 EXPECT
841 Possible unintended interpolation of @F in string at - line 4.
842 Name "main::F" used only once: possible typo at - line 4.
843 ########
844 -wa
845 # toke.c
846 # 20020414 mjd-perl-patch+@plover.com
847 EXPECT
848
849 ########
850 # toke.c
851 # 20020414 mjd-perl-patch+@plover.com
852 # In 5.7.3, this emitted "Possible unintended interpolation" warnings
853 use warnings 'ambiguous';
854 $s = "(@-)(@+)";
855 EXPECT
856
857 ########
858 # toke.c
859 # mandatory warning
860 eval q/if ($a) { } elseif ($b) { }/;
861 no warnings "syntax";
862 eval q/if ($a) { } elseif ($b) { }/;
863 EXPECT
864 elseif should be elsif at (eval 1) line 1.
865 ########
866 # toke.c
867 # mandatory warning
868 eval q/5 6/;
869 no warnings "syntax";
870 eval q/5 6/;
871 EXPECT
872 Number found where operator expected at (eval 1) line 1, near "5 6"
873         (Missing operator before  6?)
874 ########
875 # toke.c
876 use warnings "syntax";
877 $_ = $a = 1;
878 $a !=~  /1/;
879 $a !=~ m#1#;
880 $a !=~/1/;
881 $a !=~ ?/?;
882 $a !=~ y/1//;
883 $a !=~ tr/1//;
884 $a !=~ s/1//;
885 $a != ~/1/;
886 no warnings "syntax";
887 $a !=~  /1/;
888 $a !=~ m#1#;
889 $a !=~/1/;
890 $a !=~ ?/?;
891 $a !=~ y/1//;
892 $a !=~ tr/1//;
893 $a !=~ s/1//;
894 EXPECT
895 !=~ should be !~ at - line 4.
896 !=~ should be !~ at - line 5.
897 !=~ should be !~ at - line 6.
898 !=~ should be !~ at - line 7.
899 !=~ should be !~ at - line 8.
900 !=~ should be !~ at - line 9.
901 !=~ should be !~ at - line 10.
902 ########
903 # toke.c
904 our $foo :unique;
905 sub pam :locked;
906 sub glipp :locked {
907 }
908 sub whack_eth ($) : locked {
909 }
910 no warnings 'deprecated';
911 our $bar :unique;
912 sub zapeth :locked;
913 sub ker_plop :locked {
914 }
915 sub swa_a_p ($) : locked {
916 }
917 EXPECT
918 Use of :unique is deprecated at - line 2.
919 Use of :locked is deprecated at - line 3.
920 Use of :locked is deprecated at - line 4.
921 Use of :locked is deprecated at - line 6.
922 ########
923 # toke.c
924 use warnings "syntax";
925 sub proto_after_array(@$);
926 sub proto_after_arref(\@$);
927 sub proto_after_arref2(\[@$]);
928 sub proto_after_arref3(\[@$]_);
929 sub proto_after_hash(%$);
930 sub proto_after_hashref(\%$);
931 sub proto_after_hashref2(\[%$]);
932 sub underscore_last_pos($_);
933 sub underscore2($_;$);
934 sub underscore_fail($_$);
935 sub underscore_after_at(@_);
936 no warnings "syntax";
937 sub proto_after_array(@$);
938 sub proto_after_hash(%$);
939 sub underscore_fail($_$);
940 EXPECT
941 Prototype after '@' for main::proto_after_array : @$ at - line 3.
942 Prototype after '%' for main::proto_after_hash : %$ at - line 7.
943 Illegal character after '_' in prototype for main::underscore_fail : $_$ at - line 12.
944 Prototype after '@' for main::underscore_after_at : @_ at - line 13.
945 ########
946 # toke.c
947 use warnings "ambiguous";
948 "foo\nn" =~ /^foo$\n/;
949 "foo\nn" =~ /^foo${\}n/;
950 my $foo = qr/^foo$\n/;
951 my $bar = qr/^foo${\}n/;
952 no warnings "ambiguous";
953 "foo\nn" =~ /^foo$\n/;
954 "foo\nn" =~ /^foo${\}n/;
955 my $foo = qr/^foo$\n/;
956 my $bar = qr/^foo${\}n/;
957 EXPECT
958 Possible unintended interpolation of $\ in regex at - line 3.
959 Possible unintended interpolation of $\ in regex at - line 5.
960 ########
961 # toke.c
962 use warnings 'syntax' ;
963 my $a = "\o";
964 my $a = "\o{";
965 my $a = "\o{}";
966 no warnings 'syntax' ;
967 my $a = "\o";
968 my $a = "\o{";
969 my $a = "\o{}";
970 EXPECT
971 Missing braces on \o{} at - line 3, within string
972 Missing right brace on \o{ at - line 4, within string
973 Number with no digits at - line 5, within string
974 BEGIN not safe after errors--compilation aborted at - line 6.
975 ########
976 # toke.c
977 use warnings 'digit' ;
978 my $a = "\o{1238456}";
979 no warnings 'digit' ;
980 my $a = "\o{1238456}";
981 EXPECT
982 Non-octal character '8'.  Resolved as "\o{123}" at - line 3.
983 ########
984 # toke.c
985 use warnings;
986 my $a = "foo";
987 print $a =~ ?f? ? "yes\n" : "no\n" foreach 0..2;
988 EXPECT
989 Use of ?PATTERN? without explicit operator is deprecated at - line 4.
990 yes
991 no
992 no
993 ########
994 # toke.c
995 use warnings;
996 my $a = "\c{ack}";
997 $a = "\c,";
998 $a = "\c`";
999 no warnings 'syntax';
1000 $a = "\c{ack}";
1001 $a = "\c,";
1002 $a = "\c`";
1003 no warnings 'deprecated';
1004 EXPECT
1005 "\c{" is deprecated and is more clearly written as ";" at - line 3.
1006 "\c," is more clearly written simply as "l" at - line 4.
1007 "\c`" is more clearly written simply as "\ " at - line 5.
1008 "\c{" is deprecated and is more clearly written as ";" at - line 7.
1009 ########
1010 # toke.c
1011 use warnings 'syntax' ;
1012 my $a = qr/foo/du;
1013 $a = qr/foo/lai;
1014 $a = qr/foo/lil;
1015 $a = qr/foo/aia;
1016 $a = qr/foo/aaia;
1017 no warnings 'syntax' ;
1018 my $a = qr/foo/du;
1019 EXPECT
1020 Regexp modifiers "/d" and "/u" are mutually exclusive at - line 3, near "= "
1021 Regexp modifiers "/l" and "/a" are mutually exclusive at - line 4, near "= "
1022 Regexp modifier "/l" may not appear twice at - line 5, near "= "
1023 Regexp modifier "/a" may appear a maximum of twice at - line 7, near "= "
1024 BEGIN not safe after errors--compilation aborted at - line 8.
1025 ########
1026 # toke.c
1027 # [perl #4362]
1028 eval "print q\xabfoo";
1029 print "ok\n" if
1030     $@ =~ /Can't find string terminator "\xab" anywhere before EOF/;
1031 EXPECT
1032 ok