This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
39f92b022de16f2ea5e23efbc96b9908e1257f5e
[perl5.git] / t / lib / warnings / toke
1 toke.c  AOK
2
3     we seem to have lost a few ambiguous warnings!!
4
5      Prototype after '@' for main::foo
6         sub foo (@$)
7
8      Illegal character in prototype for main::foo
9         sub foo (x)
10
11      \1 better written as $1 
12         use warnings 'syntax' ;
13         s/(abc)/\1/;
14  
15      warn(warn_nosemi) 
16      Semicolon seems to be missing
17         $a = 1
18         &time ;
19
20
21      Reversed %c= operator 
22         my $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         $a =/ 2 ;
32
33      Multidimensional syntax %.*s not supported 
34         my $a = $a[1,2] ;
35
36      You need to quote \"%s\"" 
37         sub fred {} ; $SIG{TERM} = fred;
38
39      Can't use \\%c to mean $%c in expression 
40         $_ = "ab" ; s/(ab)/\1/e;
41
42      Unquoted string "abc" may clash with future reserved word at - line 3.
43      warn(warn_reserved 
44         $a = abc;
45
46      Possible attempt to separate words with commas 
47         @a = qw(a, b, c) ;
48
49      Possible attempt to put comments in qw() list 
50         @a = qw(a b # c) ;
51
52      %s (...) interpreted as function 
53         print ("")
54         printf ("")
55         sort ("")
56
57      Old package separator used in string
58         "$foo'bar"
59         "@foo'bar"
60         "$#foo'bar"
61
62      Ambiguous use of %c{%s%s} resolved to %c%s%s 
63         $a = ${time[2]}
64         $a = ${time{2}}
65
66
67      Ambiguous use of %c{%s} resolved to %c%s
68         $a = ${time}
69         sub fred {} $a = ${fred}
70
71      Misplaced _ in number 
72         $a = 1_2;
73         $a = 1_2345_6;
74
75     Bareword \"%s\" refers to nonexistent package
76         $a = FRED:: ;
77
78     Ambiguous call resolved as CORE::%s(), qualify as such or use &
79         sub time {} 
80         my $a = time()
81
82     Unrecognized escape \\%c passed through
83         $a = "\m" ;
84
85     Useless use of \\E.
86         $a = "abcd\E" ;
87
88     Postfix dereference is experimental
89
90     %s number > %s non-portable
91         my $a =  0b011111111111111111111111111111110 ;
92         $a =  0b011111111111111111111111111111111 ;
93         $a =  0b111111111111111111111111111111111 ;
94         $a =  0x0fffffffe ;
95         $a =  0x0ffffffff ;
96         $a =  0x1ffffffff ;
97         $a =  0037777777776 ;
98         $a =  0037777777777 ;
99         $a =  0047777777777 ;
100
101     Integer overflow in binary number
102         my $a =  0b011111111111111111111111111111110 ;
103         $a =  0b011111111111111111111111111111111 ;
104         $a =  0b111111111111111111111111111111111 ;
105         $a =  0x0fffffffe ;
106         $a =  0x0ffffffff ;
107         $a =  0x1ffffffff ;
108         $a =  0037777777776 ;
109         $a =  0037777777777 ;
110         $a =  0047777777777 ;
111
112     Use of /c modifier is meaningless without /g     
113
114     Use of /c modifier is meaningless in s///
115
116     Mandatory Warnings
117     ------------------
118     Use of "%s" without parentheses is ambiguous        [check_uni]
119         rand + 4 
120
121     Ambiguous use of -%s resolved as -&%s()             [yylex]
122         sub fred {} ; - fred ;
123
124     Precedence problem: open %.*s should be open(%.*s)  [yylex]
125         open FOO || die;
126
127     Operator or semicolon missing before %c%s           [yylex]
128     Ambiguous use of %c resolved as operator %c
129         *foo *foo
130
131 __END__
132 use utf8;
133 use open qw( :utf8 :std );
134 use warnings;
135 eval "sub fòò (@\$\0) {}";
136 EXPECT
137 Prototype after '@' for main::fòò : @$\0 at (eval 1) line 1.
138 Illegal character in prototype for main::fòò : @$\0 at (eval 1) line 1.
139 ########
140 use utf8;
141 use open qw( :utf8 :std );
142 use warnings;
143 eval "sub foo (@\0) {}";
144 eval "sub foo2 :prototype(@\0) {}";
145 EXPECT
146 Prototype after '@' for main::foo : @\0 at (eval 1) line 1.
147 Illegal character in prototype for main::foo : @\0 at (eval 1) line 1.
148 Prototype after '@' for main::foo2 : @\x{0} at (eval 2) line 1.
149 Illegal character in prototype for main::foo2 : @\x{0} at (eval 2) line 1.
150 ########
151 BEGIN {
152     if (ord('A') == 193) {
153         print "SKIPPED\n# Different results on EBCDIC";
154         exit 0;
155     }
156 }
157 use utf8;
158 use open qw( :utf8 :std );
159 use warnings;
160 BEGIN { $::{"foo"} = "\@\$\0L\351on" }
161 BEGIN { eval "sub foo (@\$\0L\x{c3}\x{a9}on) {}"; }
162 EXPECT
163 Prototype after '@' for main::foo : @$\x{0}L... at (eval 1) line 1.
164 Illegal character in prototype for main::foo : @$\x{0}L... at (eval 1) line 1.
165 ########
166 use utf8;
167 use open qw( :utf8 :std );
168 use warnings;
169 BEGIN { eval "sub foo (@\0) {}"; }
170 EXPECT
171 Prototype after '@' for main::foo : @\0 at (eval 1) line 1.
172 Illegal character in prototype for main::foo : @\0 at (eval 1) line 1.
173 ########
174 use warnings;
175 eval "sub foo (@\xAB) {}";
176 EXPECT
177 Prototype after '@' for main::foo : @\x{ab} at (eval 1) line 1.
178 Illegal character in prototype for main::foo : @\x{ab} at (eval 1) line 1.
179 ########
180 use utf8;
181 use open qw( :utf8 :std );
182 use warnings;
183 BEGIN { eval "sub foo (@\x{30cb}) {}"; }
184 EXPECT
185 Prototype after '@' for main::foo : @\x{30cb} at (eval 1) line 1.
186 Illegal character in prototype for main::foo : @\x{30cb} at (eval 1) line 1.
187 ########
188 use warnings;
189 sub f ([);
190 sub f :prototype([)
191 EXPECT
192 Missing ']' in prototype for main::f : [ at - line 2.
193 Missing ']' in prototype for main::f : [ at - line 3.
194 ########
195 use warnings;
196 package bar { sub bar { eval q"sub foo ([)" } }
197 bar::bar
198 EXPECT
199 Missing ']' in prototype for bar::foo : [ at (eval 1) line 1.
200 ########
201 # toke.c
202 $a =~ m/$foo/eq;
203 $a =~ s/$foo/fool/seq;
204
205 EXPECT
206 OPTION fatal
207 Unknown regexp modifier "/e" at - line 2, near "=~ "
208 Unknown regexp modifier "/q" at - line 2, near "=~ "
209 Unknown regexp modifier "/q" at - line 3, near "=~ "
210 Execution of - aborted due to compilation errors.
211 ########
212 # toke.c
213 use utf8;
214 use open qw( :utf8 :std );
215 $a =~ m/$foo/eネq;
216 $a =~ s/$foo/fool/seネq;
217
218 EXPECT
219 OPTION fatal
220 Unknown regexp modifier "/e" at - line 4, near "=~ "
221 Unknown regexp modifier "/ネ" at - line 4, near "=~ "
222 Unknown regexp modifier "/q" at - line 4, near "=~ "
223 Unknown regexp modifier "/ネ" at - line 5, near "=~ "
224 Unknown regexp modifier "/q" at - line 5, near "=~ "
225 Execution of - aborted due to compilation errors.
226 ########
227 # toke.c
228 use warnings 'syntax' ;
229 s/(abc)/\1/;
230 no warnings 'syntax' ;
231 s/(abc)/\1/;
232 EXPECT
233 \1 better written as $1 at - line 3.
234 ########
235 # toke.c
236 use warnings 'semicolon' ;
237 $a = 1
238 &time ;
239 no warnings 'semicolon' ;
240 $a = 1
241 &time ;
242 EXPECT
243 Semicolon seems to be missing at - line 3.
244 ########
245 # toke.c
246 use warnings 'syntax' ;
247 my $a =+ 2 ;
248 $a =- 2 ;
249 $a =* 2 ;
250 $a =% 2 ;
251 $a =& 2 ;
252 $a =. 2 ;
253 $a =^ 2 ;
254 $a =| 2 ;
255 $a =< 2 ;
256 $a =/ 2 ;
257 EXPECT
258 Reversed += operator at - line 3.
259 Reversed -= operator at - line 4.
260 Reversed *= operator at - line 5.
261 Reversed %= operator at - line 6.
262 Reversed &= operator at - line 7.
263 Reversed .= operator at - line 8.
264 Reversed ^= operator at - line 9.
265 Reversed |= operator at - line 10.
266 Reversed <= operator at - line 11.
267 syntax error at - line 8, near "=."
268 syntax error at - line 9, near "=^"
269 syntax error at - line 10, near "=|"
270 Unterminated <> operator at - line 11.
271 ########
272 # toke.c
273 no warnings 'syntax' ;
274 my $a =+ 2 ;
275 $a =- 2 ;
276 $a =* 2 ;
277 $a =% 2 ;
278 $a =& 2 ;
279 $a =. 2 ;
280 $a =^ 2 ;
281 $a =| 2 ;
282 $a =< 2 ;
283 $a =/ 2 ;
284 EXPECT
285 syntax error at - line 8, near "=."
286 syntax error at - line 9, near "=^"
287 syntax error at - line 10, near "=|"
288 Unterminated <> operator at - line 11.
289 ########
290 # toke.c
291 use warnings 'syntax' ;
292 my $a = $a[1,2] ;
293 no warnings 'syntax' ;
294 my $a = $a[1,2] ;
295 EXPECT
296 Multidimensional syntax $a[1,2] not supported at - line 3.
297 ########
298 # toke.c
299 use warnings 'syntax' ;
300 sub fred {} ; $SIG{TERM} = fred;
301 no warnings 'syntax' ;
302 $SIG{TERM} = fred;
303 EXPECT
304 You need to quote "fred" at - line 3.
305 ########
306 # toke.c
307 use utf8;
308 use open qw( :utf8 :std );
309 use warnings 'syntax' ;
310 sub frèd {} ; $SIG{TERM} = frèd;
311 no warnings 'syntax' ;
312 $SIG{TERM} = frèd;
313 EXPECT
314 You need to quote "frèd" at - line 5.
315 ########
316 # toke.c
317 use utf8;
318 use open qw( :utf8 :std );
319 use warnings 'syntax' ;
320 sub ふれど {} ; $SIG{TERM} = ふれど;
321 no warnings 'syntax' ;
322 $SIG{TERM} = ふれど;
323 EXPECT
324 You need to quote "ふれど" at - line 5.
325 ########
326 # toke.c
327 use warnings 'syntax' ;
328 $_ = "ab" ; 
329 s/(ab)/\1/e;
330 s//\(2)/e; # should be exempt
331 s/${\2}//; # same here
332 ()="${\2}"; # metoo
333 no warnings 'syntax' ;
334 $_ = "ab" ; 
335 s/(ab)/\1/e;
336 EXPECT
337 Can't use \1 to mean $1 in expression at - line 4.
338 ########
339 # toke.c
340 use warnings 'reserved' ;
341 $a = abc;
342 $a = { def
343
344 => 1 };
345 no warnings 'reserved' ;
346 $a = abc;
347 EXPECT
348 Unquoted string "abc" may clash with future reserved word at - line 3.
349 ########
350 # toke.c
351 use warnings 'qw' ;
352 @a = qw(a, b, c) ;
353 no warnings 'qw' ;
354 @a = qw(a, b, c) ;
355 EXPECT
356 Possible attempt to separate words with commas at - line 3.
357 ########
358 # toke.c
359 use warnings 'qw' ;
360 @a = qw(a b c # #) ;
361 no warnings 'qw' ;
362 @a = qw(a b c # #) ;
363 EXPECT
364 Possible attempt to put comments in qw() list at - line 3.
365 ########
366 # toke.c
367 use warnings 'qw' ;
368 @a = qw(a, b, c # #) ;
369 no warnings 'qw' ;
370 @a = qw(a, b, c # #) ;
371 EXPECT
372 Possible attempt to separate words with commas at - line 3.
373 Possible attempt to put comments in qw() list at - line 3.
374 ########
375 # toke.c
376 use warnings 'syntax' ;
377 print ("");
378 print ("") and $x = 1;
379 print ("") or die;
380 print ("") // die;
381 print (1+2) * 3 if 0; # only this one should warn
382 print (1+2) if 0;
383 EXPECT
384 print (...) interpreted as function at - line 7.
385 ########
386 # toke.c
387 no warnings 'syntax' ;
388 print ("")
389 EXPECT
390
391 ########
392 # toke.c
393 use warnings 'syntax' ;
394 printf ("");
395 printf ("") . '';
396 EXPECT
397 printf (...) interpreted as function at - line 4.
398 ########
399 # toke.c
400 no warnings 'syntax' ;
401 printf ("")
402 EXPECT
403
404 ########
405 # toke.c
406 use warnings 'syntax' ;
407 sort ("");
408 sort ("") . '';
409 EXPECT
410 sort (...) interpreted as function at - line 4.
411 ########
412 # toke.c
413 no warnings 'syntax' ;
414 sort ("")
415 EXPECT
416
417 ########
418 use warnings 'syntax';
419 @foo::bar = 1..3;
420 () = "$foo'bar";
421 () = "@foo'bar";
422 () = "$#foo'bar";
423 no warnings 'syntax' ;
424 () = "$foo'bar";
425 () = "@foo'bar";
426 () = "$#foo'bar";
427 EXPECT
428 Old package separator used in string at - line 3.
429         (Did you mean "$foo\'bar" instead?)
430 Old package separator used in string at - line 4.
431         (Did you mean "@foo\'bar" instead?)
432 Old package separator used in string at - line 5.
433         (Did you mean "$#foo\'bar" instead?)
434 ########
435 use warnings 'syntax'; use utf8;
436 @fooл::barл = 1..3;
437 () = "$fooл'barл";
438 () = "@fooл'barл";
439 () = "$#fooл'barл";
440 no warnings 'syntax' ;
441 () = "$fooл'barл";
442 () = "@fooл'barл";
443 () = "$#fooл'barл";
444 EXPECT
445 Old package separator used in string at - line 3.
446         (Did you mean "$fooл\'barл" instead?)
447 Old package separator used in string at - line 4.
448         (Did you mean "@fooл\'barл" instead?)
449 Old package separator used in string at - line 5.
450         (Did you mean "$#fooл\'barл" instead?)
451 ########
452 # toke.c
453 use warnings 'ambiguous' ;
454 $a = ${time[2]};
455 no warnings 'ambiguous' ;
456 $a = ${time[2]};
457 EXPECT
458 Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
459 ########
460 # toke.c
461 use warnings 'ambiguous' ;
462 $a = ${time{2}};
463 EXPECT
464 Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
465 ########
466 # toke.c
467 use warnings 'ambiguous' ;
468 $a = ${
469
470     time
471         {2}
472 };
473 warn "after";
474 EXPECT
475 Ambiguous use of ${time{...}} resolved to $time{...} at - line 5.
476 after at - line 8.
477 ########
478 # toke.c
479 use warnings 'ambiguous' ;
480 $a = ${
481
482 time[2]
483
484 };
485 $a = ${
486
487 time    
488    [2]
489
490 };
491 warn "after";
492 EXPECT
493 Ambiguous use of ${time[...]} resolved to $time[...] at - line 5.
494 Ambiguous use of ${time[...]} resolved to $time[...] at - line 10.
495 after at - line 14.
496 ########
497 # toke.c
498 no warnings 'ambiguous' ;
499 $a = ${time{2}};
500 EXPECT
501
502 ########
503 # toke.c
504 use warnings 'ambiguous' ;
505 $a = ${time} ;
506 $a = @{time} ;
507 $a = $#{time} ; # This one is special cased in toke.c
508 $a = %{time} ;
509 $a = *{time} ;
510 $a = defined &{time} ; # To avoid calling &::time
511 no warnings 'ambiguous' ;
512 $a = ${time} ;
513 $a = @{time} ;
514 $a = $#{time} ; # This one is special cased in toke.c
515 $a = %{time} ;
516 $a = *{time} ;
517 $a = defined &{time} ; # To avoid calling &::time
518 EXPECT
519 Ambiguous use of ${time} resolved to $time at - line 3.
520 Ambiguous use of @{time} resolved to @time at - line 4.
521 Ambiguous use of @{time} resolved to @time at - line 5.
522 Ambiguous use of %{time} resolved to %time at - line 6.
523 Ambiguous use of *{time} resolved to *time at - line 7.
524 Ambiguous use of &{time} resolved to &time at - line 8.
525 ########
526 # toke.c
527 use warnings 'ambiguous' ;
528 $a = ${
529 time
530 } ;
531 $a = @{
532 time
533 } ;
534 $a = $#{
535 time
536 } ;
537 $a = %{
538 time
539 } ;
540 $a = *{
541 time
542 } ;
543 $a = defined &{
544 time
545
546
547 } ;
548 warn "last";
549 EXPECT
550 Ambiguous use of ${time} resolved to $time at - line 4.
551 Ambiguous use of @{time} resolved to @time at - line 7.
552 Ambiguous use of @{time} resolved to @time at - line 10.
553 Ambiguous use of %{time} resolved to %time at - line 13.
554 Ambiguous use of *{time} resolved to *time at - line 16.
555 Ambiguous use of &{time} resolved to &time at - line 19.
556 last at - line 23.
557 ########
558 # toke.c
559 use warnings 'ambiguous' ;
560 sub fred {}
561 $a = ${fred} ;
562 no warnings 'ambiguous' ;
563 $a = ${fred} ;
564 EXPECT
565 Ambiguous use of ${fred} resolved to $fred at - line 4.
566 ########
567 # toke.c
568 use warnings 'syntax' ;
569 $a = _123; print "$a\n";                #( 3    string)
570 $a = 1_23; print "$a\n";
571 $a = 12_3; print "$a\n";
572 $a = 123_; print "$a\n";                #  6
573 $a = _+123; print "$a\n";               #  7    string)
574 $a = +_123; print "$a\n";               #( 8    string)
575 $a = +1_23; print "$a\n";
576 $a = +12_3; print "$a\n";
577 $a = +123_; print "$a\n";               # 11
578 $a = _-123; print "$a\n";               #(12    string)
579 $a = -_123; print "$a\n";               #(13    string)
580 $a = -1_23; print "$a\n";
581 $a = -12_3; print "$a\n";
582 $a = -123_; print "$a\n";               # 16
583 $a = 123._456; print "$a\n";            # 17
584 $a = 123.4_56; print "$a\n";
585 $a = 123.45_6; print "$a\n";
586 $a = 123.456_; print "$a\n";            # 20
587 $a = +123._456; print "$a\n";           # 21
588 $a = +123.4_56; print "$a\n";   
589 $a = +123.45_6; print "$a\n";   
590 $a = +123.456_; print "$a\n";           # 24
591 $a = -123._456; print "$a\n";           # 25
592 $a = -123.4_56; print "$a\n";   
593 $a = -123.45_6; print "$a\n";
594 $a = -123.456_; print "$a\n";           # 28
595 $a = 123.456E_12; printf("%.0f\n", $a); # 29
596 $a = 123.456E1_2; printf("%.0f\n", $a);
597 $a = 123.456E12_; printf("%.0f\n", $a); # 31
598 $a = 123.456E_+12; printf("%.0f\n", $a);        # 32
599 $a = 123.456E+_12; printf("%.0f\n", $a);        # 33
600 $a = 123.456E+1_2; printf("%.0f\n", $a);
601 $a = 123.456E+12_; printf("%.0f\n", $a);        # 35
602 $a = 123.456E_-12; print "$a\n";        # 36
603 $a = 123.456E-_12; print "$a\n";        # 37
604 $a = 123.456E-1_2; print "$a\n";
605 $a = 123.456E-12_; print "$a\n";        # 39
606 $a = 1__23; print "$a\n";               # 40
607 $a = 12.3__4; print "$a\n";             # 41
608 $a = 12.34e1__2; printf("%.0f\n", $a);  # 42
609 no warnings 'syntax' ;
610 $a = _123; print "$a\n";
611 $a = 1_23; print "$a\n";
612 $a = 12_3; print "$a\n";
613 $a = 123_; print "$a\n";
614 $a = _+123; print "$a\n";
615 $a = +_123; print "$a\n";
616 $a = +1_23; print "$a\n";
617 $a = +12_3; print "$a\n";
618 $a = +123_; print "$a\n";
619 $a = _-123; print "$a\n";
620 $a = -_123; print "$a\n";
621 $a = -1_23; print "$a\n";
622 $a = -12_3; print "$a\n";
623 $a = -123_; print "$a\n";
624 $a = 123._456; print "$a\n";
625 $a = 123.4_56; print "$a\n";
626 $a = 123.45_6; print "$a\n";
627 $a = 123.456_; print "$a\n";
628 $a = +123._456; print "$a\n";
629 $a = +123.4_56; print "$a\n";
630 $a = +123.45_6; print "$a\n";
631 $a = +123.456_; print "$a\n";
632 $a = -123._456; print "$a\n";
633 $a = -123.4_56; print "$a\n";
634 $a = -123.45_6; print "$a\n";
635 $a = -123.456_; print "$a\n";
636 $a = 123.456E_12; printf("%.0f\n", $a);
637 $a = 123.456E1_2; printf("%.0f\n", $a);
638 $a = 123.456E12_; printf("%.0f\n", $a);
639 $a = 123.456E_+12; printf("%.0f\n", $a);
640 $a = 123.456E+_12; printf("%.0f\n", $a);
641 $a = 123.456E+1_2; printf("%.0f\n", $a);
642 $a = 123.456E+12_; printf("%.0f\n", $a);
643 $a = 123.456E_-12; print "$a\n";
644 $a = 123.456E-_12; print "$a\n";
645 $a = 123.456E-1_2; print "$a\n";
646 $a = 123.456E-12_; print "$a\n";
647 $a = 1__23; print "$a\n";
648 $a = 12.3__4; print "$a\n";
649 $a = 12.34e1__2; printf("%.0f\n", $a);
650 EXPECT
651 OPTIONS regex
652 Misplaced _ in number at - line 6.
653 Misplaced _ in number at - line 11.
654 Misplaced _ in number at - line 16.
655 Misplaced _ in number at - line 17.
656 Misplaced _ in number at - line 20.
657 Misplaced _ in number at - line 21.
658 Misplaced _ in number at - line 24.
659 Misplaced _ in number at - line 25.
660 Misplaced _ in number at - line 28.
661 Misplaced _ in number at - line 29.
662 Misplaced _ in number at - line 31.
663 Misplaced _ in number at - line 32.
664 Misplaced _ in number at - line 33.
665 Misplaced _ in number at - line 35.
666 Misplaced _ in number at - line 36.
667 Misplaced _ in number at - line 37.
668 Misplaced _ in number at - line 39.
669 Misplaced _ in number at - line 40.
670 Misplaced _ in number at - line 41.
671 Misplaced _ in number at - line 42.
672 _123
673 123
674 123
675 123
676 123
677 _123
678 123
679 123
680 123
681 -123
682 -_123
683 -123
684 -123
685 -123
686 123.456
687 123.456
688 123.456
689 123.456
690 123.456
691 123.456
692 123.456
693 123.456
694 -123.456
695 -123.456
696 -123.456
697 -123.456
698 123456000000000
699 123456000000000
700 123456000000000
701 123456000000000
702 123456000000000
703 123456000000000
704 123456000000000
705 1.23456e-0?10
706 1.23456e-0?10
707 1.23456e-0?10
708 1.23456e-0?10
709 123
710 12.34
711 12340000000000
712 _123
713 123
714 123
715 123
716 123
717 _123
718 123
719 123
720 123
721 -123
722 -_123
723 -123
724 -123
725 -123
726 123.456
727 123.456
728 123.456
729 123.456
730 123.456
731 123.456
732 123.456
733 123.456
734 -123.456
735 -123.456
736 -123.456
737 -123.456
738 123456000000000
739 123456000000000
740 123456000000000
741 123456000000000
742 123456000000000
743 123456000000000
744 123456000000000
745 1.23456e-0?10
746 1.23456e-0?10
747 1.23456e-0?10
748 1.23456e-0?10
749 123
750 12.34
751 12340000000000
752 ########
753 # toke.c
754 use warnings 'syntax';
755 $a = 1_; print "$a\n";
756 $a = 01_; print "$a\n";
757 $a = 0_; print "$a\n";
758 $a = 0x1_; print "$a\n";
759 $a = 1.2_; print "$a\n";
760 $a = 1._2; print "$a\n";
761 $a = 1._; print "$a\n";
762 EXPECT
763 Misplaced _ in number at - line 3.
764 Misplaced _ in number at - line 4.
765 Misplaced _ in number at - line 5.
766 Misplaced _ in number at - line 6.
767 Misplaced _ in number at - line 7.
768 Misplaced _ in number at - line 8.
769 Misplaced _ in number at - line 9.
770 1
771 1
772 0
773 1
774 1.2
775 1.2
776 1
777 ########
778 # toke.c
779 use warnings 'bareword' ;
780 #line 25 "bar"
781 $a = FRED:: ;
782 no warnings 'bareword' ;
783 #line 25 "bar"
784 $a = FRED:: ;
785 EXPECT
786 Bareword "FRED::" refers to nonexistent package at bar line 25.
787 ########
788 # toke.c
789 use utf8;
790 use open qw( :utf8 :std );
791 use warnings 'bareword' ;
792 #line 25 "bar"
793 $a = FRÈD:: ;
794 no warnings 'bareword' ;
795 #line 25 "bar"
796 $a = FRÈD:: ;
797 EXPECT
798 Bareword "FRÈD::" refers to nonexistent package at bar line 25.
799 ########
800 # toke.c
801 use utf8;
802 use open qw( :utf8 :std );
803 use warnings 'bareword' ;
804 #line 25 "bar"
805 $a = ϞϞϞ:: ;
806 no warnings 'bareword' ;
807 #line 25 "bar"
808 $a = ϞϞϞ:: ;
809 EXPECT
810 Bareword "ϞϞϞ::" refers to nonexistent package at bar line 25.
811 ########
812 # toke.c
813 use warnings 'ambiguous' ;
814 sub time {}
815 my $a = time() ;
816 no warnings 'ambiguous' ;
817 my $b = time() ;
818 EXPECT
819 Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4.
820 ########
821 # toke.c
822 use warnings ;
823 eval <<'EOE';
824 #  line 30 "foo"
825 warn "yelp";
826 {
827   $_ = " \x{123} " ;
828 }
829 EOE
830 EXPECT
831 yelp at foo line 30.
832 ########
833 # toke.c
834 my $a = rand + 4 ;
835 $a = rand *^H ;
836 $a = rand $^H ;
837 EXPECT
838 Warning: Use of "rand" without parentheses is ambiguous at - line 2.
839 ########
840 # toke.c
841 $^W = 0 ;
842 my $a = rand + 4 ;
843 {
844     no warnings 'ambiguous' ;
845     $a = rand + 4 ;
846     use warnings 'ambiguous' ;
847     $a = rand + 4 ;
848 }
849 $a = rand + 4 ;
850 EXPECT
851 Warning: Use of "rand" without parentheses is ambiguous at - line 3.
852 Warning: Use of "rand" without parentheses is ambiguous at - line 8.
853 Warning: Use of "rand" without parentheses is ambiguous at - line 10.
854 ########
855 # [perl #97110]
856 sub myrand(;$) { }
857 sub whatever($) { }
858 my $a = myrand + 4 ;
859 my $b = whatever + 4 ;
860 EXPECT
861 Warning: Use of "myrand" without parentheses is ambiguous at - line 4.
862 ########
863 # toke.c
864 use warnings "ambiguous";
865 print for keys %+; # should not warn
866 EXPECT
867 ########
868 # toke.c [This does not warn any more.]
869 sub fred {};
870 -fred ;
871 sub hank : lvalue {$_}
872 --hank; # This should *not* warn [perl #77240]
873 EXPECT
874 ########
875 # toke.c [This does not warn any more.]
876 $^W = 0 ;
877 sub fred {} ;
878 -fred ;
879 {
880     no warnings 'ambiguous' ;
881     -fred ;
882     use warnings 'ambiguous' ;
883     -fred ;
884 }
885 -fred ;
886 EXPECT
887 ########
888 # toke.c [This does not warn any more.]
889 use utf8;
890 use open qw( :utf8 :std );
891 sub frèd {};
892 -frèd ;
893 EXPECT
894 ########
895 # toke.c [This does not warn any more.]
896 $^W = 0 ;
897 use utf8;
898 use open qw( :utf8 :std );
899 sub frèd {} ;
900 -frèd ;
901 {
902     no warnings 'ambiguous' ;
903     -frèd ;
904     use warnings 'ambiguous' ;
905     -frèd ;
906 }
907 -frèd ;
908 EXPECT
909 ########
910 # toke.c [This does not warn any more.]
911 use utf8;
912 use open qw( :utf8 :std );
913 sub ᒍᒘᒊ {};
914 -ᒍᒘᒊ ;
915 EXPECT
916 ########
917 # toke.c [This does not warn any more.]
918 $^W = 0 ;
919 use utf8;
920 use open qw( :utf8 :std );
921 sub ᒍᒘᒊ {} ;
922 -ᒍᒘᒊ ;
923 {
924     no warnings 'ambiguous' ;
925     -ᒍᒘᒊ ;
926     use warnings 'ambiguous' ;
927     -ᒍᒘᒊ ;
928 }
929 -ᒍᒘᒊ ;
930 EXPECT
931 ########
932 # toke.c
933 open FOO || time;
934 open local *FOO; # should be ok
935 EXPECT
936 Precedence problem: open FOO should be open(FOO) at - line 2.
937 ########
938 # toke.c
939 use utf8;
940 use open qw( :utf8 :std );
941 open FÒÒ || time;
942 EXPECT
943 Precedence problem: open FÒÒ should be open(FÒÒ) at - line 4.
944 ########
945 # toke.c
946 use utf8;
947 use open qw( :utf8 :std );
948 open ᒍOO || time;
949 EXPECT
950 Precedence problem: open ᒍOO should be open(ᒍOO) at - line 4.
951 ########
952 # toke.c (and [perl #16184])
953 open FOO => "<&0"; close FOO;
954 EXPECT
955 ########
956 # toke.c
957 $^W = 0 ;
958 open FOO || time;
959 {
960     no warnings 'precedence' ;
961     open FOO || time;
962     use warnings 'precedence' ;
963     open FOO || time;
964 }
965 open FOO || time;
966 open Foo::BAR; # this should not warn
967 EXPECT
968 Precedence problem: open FOO should be open(FOO) at - line 3.
969 Precedence problem: open FOO should be open(FOO) at - line 8.
970 Precedence problem: open FOO should be open(FOO) at - line 10.
971 ########
972 # toke.c
973 $^W = 0 ;
974 use utf8;
975 use open qw( :utf8 :std );
976 open FÒÒ || time;
977 {
978     no warnings 'precedence' ;
979     open FÒÒ || time;
980     use warnings 'precedence' ;
981     open FÒÒ || time;
982 }
983 open FÒÒ || time;
984 EXPECT
985 Precedence problem: open FÒÒ should be open(FÒÒ) at - line 5.
986 Precedence problem: open FÒÒ should be open(FÒÒ) at - line 10.
987 Precedence problem: open FÒÒ should be open(FÒÒ) at - line 12.
988 ########
989 # toke.c
990 use utf8;
991 use open qw( :utf8 :std );
992 $^W = 0 ;
993 open ᒍÒÒ || time;
994 {
995     no warnings 'precedence' ;
996     open ᒍÒÒ || time;
997     use warnings 'precedence' ;
998     open ᒍÒÒ || time;
999 }
1000 open ᒍÒÒ || time;
1001 EXPECT
1002 Precedence problem: open ᒍÒÒ should be open(ᒍÒÒ) at - line 5.
1003 Precedence problem: open ᒍÒÒ should be open(ᒍÒÒ) at - line 10.
1004 Precedence problem: open ᒍÒÒ should be open(ᒍÒÒ) at - line 12.
1005 ########
1006 # toke.c
1007 $^W = 0 ;
1008 *foo *foo ;
1009 {
1010     no warnings 'ambiguous' ;
1011     *foo *foo ;
1012     use warnings 'ambiguous' ;
1013     *foo *foo ;
1014 }
1015 *foo *foo ;
1016 # These should not warn [perl #117535]:
1017 foo**foo ;
1018 no warnings 'deprecated';
1019 sort $*foo ;
1020 sort $ *foo ;
1021 EXPECT
1022 Operator or semicolon missing before *foo at - line 3.
1023 Ambiguous use of * resolved as operator * at - line 3.
1024 Operator or semicolon missing before *foo at - line 8.
1025 Ambiguous use of * resolved as operator * at - line 8.
1026 Operator or semicolon missing before *foo at - line 10.
1027 Ambiguous use of * resolved as operator * at - line 10.
1028 $* is no longer supported as of Perl 5.30 at - line 14.
1029 ########
1030 # toke.c
1031 $^W = 0 ;
1032 %foo %foo ;
1033 {
1034     no warnings 'ambiguous' ;
1035     %foo %foo ;
1036     use warnings 'ambiguous' ;
1037     %foo %foo ;
1038 }
1039 %foo %foo ;
1040 # This should not produce ambiguity warnings [perl #117535]:
1041 sort $%foo ;
1042 sort $ %foo ;
1043 EXPECT
1044 Operator or semicolon missing before %foo at - line 3.
1045 Ambiguous use of % resolved as operator % at - line 3.
1046 Operator or semicolon missing before %foo at - line 8.
1047 Ambiguous use of % resolved as operator % at - line 8.
1048 Operator or semicolon missing before %foo at - line 10.
1049 Ambiguous use of % resolved as operator % at - line 10.
1050 Bareword found where operator expected at - line 12, near "$%foo"
1051         (Missing operator before foo?)
1052 Bareword found where operator expected at - line 13, near "$ %foo"
1053         (Missing operator before foo?)
1054 Illegal modulus zero at - line 3.
1055 ########
1056 # toke.c
1057 $^W = 0 ;
1058 &foo &foo ;
1059 {
1060     no warnings 'ambiguous' ;
1061     &foo &foo ;
1062     use warnings 'ambiguous' ;
1063     &foo &foo ;
1064 }
1065 &foo &foo ;
1066 # These should not warn produce ambiguity warnings [perl #76910]:
1067 foo&&foo ;
1068 sort $&foo ;
1069 sort $ &foo ;
1070 EXPECT
1071 Operator or semicolon missing before &foo at - line 3.
1072 Ambiguous use of & resolved as operator & at - line 3.
1073 Operator or semicolon missing before &foo at - line 8.
1074 Ambiguous use of & resolved as operator & at - line 8.
1075 Operator or semicolon missing before &foo at - line 10.
1076 Ambiguous use of & resolved as operator & at - line 10.
1077 Bareword found where operator expected at - line 13, near "$&foo"
1078         (Missing operator before foo?)
1079 Bareword found where operator expected at - line 14, near "$ &foo"
1080         (Missing operator before foo?)
1081 Undefined subroutine &main::foo called at - line 3.
1082 ########
1083 # toke.c
1084 use utf8;
1085 use open qw( :utf8 :std );
1086 $^W = 0 ;
1087 *foo *foo ;
1088 {
1089     no warnings 'ambiguous' ;
1090     *foo *foo ;
1091     use warnings 'ambiguous' ;
1092     *foo *foo ;
1093 }
1094 *foo *foo ;
1095 EXPECT
1096 Operator or semicolon missing before *foo at - line 5.
1097 Ambiguous use of * resolved as operator * at - line 5.
1098 Operator or semicolon missing before *foo at - line 10.
1099 Ambiguous use of * resolved as operator * at - line 10.
1100 Operator or semicolon missing before *foo at - line 12.
1101 Ambiguous use of * resolved as operator * at - line 12.
1102 ########
1103 # toke.c
1104 use warnings 'misc' ;
1105 my $a = "\m" ;
1106 no warnings 'misc' ;
1107 $a = "\m" ;
1108 EXPECT
1109 Unrecognized escape \m passed through at - line 3.
1110 ########
1111 # toke.c
1112 use warnings 'misc' ;
1113 my $a = "abcd\E" ;
1114 no warnings 'misc' ;
1115 $a = "abcd\E" ;
1116 EXPECT
1117 Useless use of \E at - line 3.
1118 ########
1119 # toke.c
1120 use feature 'postderef_qq';
1121 (\$_)->$*;
1122 "$_->$*";
1123 (\$_)->$*;
1124 "$_->$*";
1125 EXPECT
1126 ########
1127 # toke.c
1128 use warnings 'portable' ;
1129 my $a =  0b011111111111111111111111111111110 ;
1130    $a =  0b011111111111111111111111111111111 ;
1131    $a =  0b111111111111111111111111111111111 ;
1132    $a =  0x0fffffffe ;
1133    $a =  0x0ffffffff ;
1134    $a =  0x1ffffffff ;
1135    $a =  0037777777776 ;
1136    $a =  0037777777777 ;
1137    $a =  0047777777777 ;
1138 no warnings 'portable' ;
1139    $a =  0b011111111111111111111111111111110 ;
1140    $a =  0b011111111111111111111111111111111 ;
1141    $a =  0b111111111111111111111111111111111 ;
1142    $a =  0x0fffffffe ;
1143    $a =  0x0ffffffff ;
1144    $a =  0x1ffffffff ;
1145    $a =  0037777777776 ;
1146    $a =  0037777777777 ;
1147    $a =  0047777777777 ;
1148 EXPECT
1149 Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
1150 Hexadecimal number > 0xffffffff non-portable at - line 8.
1151 Octal number > 037777777777 non-portable at - line 11.
1152 ########
1153 # toke.c
1154 use warnings 'overflow' ;
1155 my $a =  0b011111111111111111111111111111110 ;
1156    $a =  0b011111111111111111111111111111111 ;
1157    $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
1158    $a =  0x0fffffffe ;
1159    $a =  0x0ffffffff ;
1160    $a =  0x10000000000000000 ;
1161    $a =  0037777777776 ;
1162    $a =  0037777777777 ;
1163    $a =  002000000000000000000000;
1164 no warnings 'overflow' ;
1165    $a =  0b011111111111111111111111111111110 ;
1166    $a =  0b011111111111111111111111111111111 ;
1167    $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
1168    $a =  0x0fffffffe ;
1169    $a =  0x0ffffffff ;
1170    $a =  0x10000000000000000 ;
1171    $a =  0037777777776 ;
1172    $a =  0037777777777 ;
1173    $a =  002000000000000000000000;
1174 EXPECT
1175 Integer overflow in binary number at - line 5.
1176 Integer overflow in hexadecimal number at - line 8.
1177 Integer overflow in octal number at - line 11.
1178 ########
1179 # toke.c
1180 use warnings 'ambiguous';
1181 "@mjd_previously_unused_array";        
1182 no warnings 'ambiguous';
1183 "@mjd_previously_unused_array2";        
1184 EXPECT
1185 Possible unintended interpolation of @mjd_previously_unused_array in string at - line 3.
1186 ########
1187 # toke.c
1188 use utf8;
1189 use open qw( :utf8 :std );
1190 use warnings 'ambiguous';
1191 "@mjd_previously_unused_àrray";        
1192 no warnings 'ambiguous';
1193 "@mjd_previously_unused_àrray2";        
1194 EXPECT
1195 Possible unintended interpolation of @mjd_previously_unused_àrray in string at - line 5.
1196 ########
1197 # toke.c
1198 use utf8;
1199 use open qw( :utf8 :std );
1200 use warnings 'ambiguous';
1201 "@mjd_previously_unused_ぁrrぁy";        
1202 no warnings 'ambiguous';
1203 "@mjd_previously_unused_ぁrrぁy2";        
1204 EXPECT
1205 Possible unintended interpolation of @mjd_previously_unused_ぁrrぁy in string at - line 5.
1206 ########
1207 -w
1208 # toke.c
1209 $_ = "@DB::args";        
1210 EXPECT
1211 ########
1212 # toke.c
1213 # 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com
1214 use warnings 'regexp';
1215 "foo" =~ /foo/c;
1216 "foo" =~ /foo/cg;
1217 no warnings 'regexp';
1218 "foo" =~ /foo/c;
1219 "foo" =~ /foo/cg;
1220 EXPECT
1221 Use of /c modifier is meaningless without /g at - line 4.
1222 ########
1223 # toke.c
1224 # 20020328 mjd-perl-patch+@plover.com at behest of jfriedl@yahoo.com
1225 use warnings 'regexp';
1226 $_ = "ab" ; 
1227 s/ab/ab/c;
1228 s/ab/ab/cg;
1229 no warnings 'regexp';
1230 s/ab/ab/c;
1231 s/ab/ab/cg;
1232 EXPECT
1233 Use of /c modifier is meaningless in s/// at - line 5.
1234 Use of /c modifier is meaningless in s/// at - line 6.
1235 ########
1236 -wa
1237 # toke.c
1238 # 20020414 mjd-perl-patch+@plover.com # -a flag should suppress these warnings
1239 print "@F\n";
1240 EXPECT
1241
1242 ########
1243 -w
1244 # toke.c
1245 # 20020414 mjd-perl-patch+@plover.com # -a flag should suppress these warnings
1246 print "@F\n";
1247 EXPECT
1248 Possible unintended interpolation of @F in string at - line 4.
1249 Name "main::F" used only once: possible typo at - line 4.
1250 ########
1251 -wa
1252 # toke.c
1253 # 20020414 mjd-perl-patch+@plover.com
1254 EXPECT
1255
1256 ########
1257 # toke.c
1258 # 20020414 mjd-perl-patch+@plover.com
1259 # In 5.7.3, this emitted "Possible unintended interpolation" warnings
1260 use warnings 'ambiguous';
1261 $s = "(@-)(@+)";
1262 EXPECT
1263
1264 ########
1265 # toke.c
1266 # mandatory warning
1267 eval q/if ($a) { } elseif ($b) { }/;
1268 no warnings "syntax";
1269 eval q/if ($a) { } elseif ($b) { }/;
1270 EXPECT
1271 elseif should be elsif at (eval 1) line 1.
1272 ########
1273 # toke.c
1274 # mandatory warning
1275 eval q/5 6/;
1276 no warnings "syntax";
1277 eval q/5 6/;
1278 EXPECT
1279 Number found where operator expected at (eval 1) line 1, near "5 6"
1280         (Missing operator before  6?)
1281 ########
1282 # toke.c
1283 use warnings "syntax"; no warnings "deprecated";
1284 $_ = $a = 1;
1285 $a !=~  /1/;
1286 $a !=~ m#1#;
1287 $a !=~/1/;
1288 $a !=~ y/1//;
1289 $a !=~ tr/1//;
1290 $a !=~ s/1//;
1291 $a != ~/1/;
1292 no warnings "syntax";
1293 $a !=~  /1/;
1294 $a !=~ m#1#;
1295 $a !=~/1/;
1296 $a !=~ y/1//;
1297 $a !=~ tr/1//;
1298 $a !=~ s/1//;
1299 EXPECT
1300 !=~ should be !~ at - line 4.
1301 !=~ should be !~ at - line 5.
1302 !=~ should be !~ at - line 6.
1303 !=~ should be !~ at - line 7.
1304 !=~ should be !~ at - line 8.
1305 !=~ should be !~ at - line 9.
1306 ########
1307 # toke.c
1308 use warnings "syntax";
1309 sub proto_after_array(@$);
1310 sub proto_after_arref(\@$);
1311 sub proto_after_arref2(\[@$]);
1312 sub proto_after_arref3(\[@$]_);
1313 sub proto_after_hash(%$);
1314 sub proto_after_hashref(\%$);
1315 sub proto_after_hashref2(\[%$]);
1316 sub underscore_last_pos($_);
1317 sub underscore2($_;$);
1318 sub underscore_fail($_$); sub underscore_fail2 : prototype($_$);
1319 sub underscore_after_at(@_);
1320 our sub hour (@$);
1321 my sub migh (@$);
1322 use feature 'state';
1323 state sub estate (@$);
1324 package other;
1325 sub hour (@$);
1326 sub migh (@$);
1327 sub estate (@$);
1328 no warnings "syntax";
1329 sub proto_after_array(@$);
1330 sub proto_after_hash(%$);
1331 sub underscore_fail($_$);
1332 EXPECT
1333 Prototype after '@' for main::proto_after_array : @$ at - line 3.
1334 Prototype after '%' for main::proto_after_hash : %$ at - line 7.
1335 Illegal character after '_' in prototype for main::underscore_fail : $_$ at - line 12.
1336 Illegal character after '_' in prototype for main::underscore_fail2 : $_$ at - line 12.
1337 Prototype after '@' for main::underscore_after_at : @_ at - line 13.
1338 Prototype after '@' for hour : @$ at - line 14.
1339 Prototype after '@' for migh : @$ at - line 15.
1340 Prototype after '@' for estate : @$ at - line 17.
1341 Prototype after '@' for hour : @$ at - line 19.
1342 Prototype after '@' for migh : @$ at - line 20.
1343 Prototype after '@' for estate : @$ at - line 21.
1344 ########
1345 # toke.c
1346 use warnings "ambiguous";
1347 "foo\nn" =~ /^foo$\n/;
1348 "foo\nn" =~ /^foo${\}n/;
1349 my $foo = qr/^foo$\n/;
1350 my $bar = qr/^foo${\}n/;
1351 no warnings "ambiguous";
1352 "foo\nn" =~ /^foo$\n/;
1353 "foo\nn" =~ /^foo${\}n/;
1354 my $foo = qr/^foo$\n/;
1355 my $bar = qr/^foo${\}n/;
1356 EXPECT
1357 Possible unintended interpolation of $\ in regex at - line 3.
1358 Possible unintended interpolation of $\ in regex at - line 5.
1359 ########
1360 # toke.c
1361 use warnings 'syntax' ;
1362 my $a = "\o";
1363 my $a = "\o{";
1364 my $a = "\o{}";
1365 no warnings 'syntax' ;
1366 my $a = "\o";
1367 my $a = "\o{";
1368 my $a = "\o{}";
1369 EXPECT
1370 Missing braces on \o{} at - line 3, within string
1371 Missing right brace on \o{} at - line 4, within string
1372 Empty \o{} at - line 5, within string
1373 BEGIN not safe after errors--compilation aborted at - line 6.
1374 ########
1375 # toke.c
1376 use warnings 'digit' ;
1377 my $a = "\o{1238456}";
1378 no warnings 'digit' ;
1379 my $a = "\o{1238456}";
1380 EXPECT
1381 Non-octal character '8' terminates \o early.  Resolved as "\o{123}" at - line 3.
1382 ########
1383 # toke.c
1384 use warnings;
1385 print ref ? "yes\n" : "no\n" foreach [], ''; # ? is unambiguosly an operator
1386 EXPECT
1387 yes
1388 no
1389 ########
1390 # toke .c
1391 use warnings;
1392 $a =~ ?rand?; # ? is not a regex match
1393 EXPECT
1394 syntax error at - line 3, near "=~ ?"
1395 Execution of - aborted due to compilation errors.
1396 ########
1397 # toke.c
1398 BEGIN {
1399     if (ord('A') == 193) {
1400         print "SKIPPED\n# result varies depending on which ebcdic platform";
1401         exit 0;
1402     }
1403 }
1404 use warnings;
1405 $a = "\c,";
1406 $a = "\c`";
1407 no warnings 'syntax';
1408 $a = "\c,";
1409 $a = "\c`";
1410 EXPECT
1411 "\c," is more clearly written simply as "l" at - line 9.
1412 "\c`" is more clearly written simply as "\ " at - line 10.
1413 ########
1414 # toke.c
1415 BEGIN {
1416     if (ord('A') == 193) {
1417         print "SKIPPED\n# test is ASCII-specific";
1418         exit 0;
1419     }
1420 }
1421 use warnings;
1422 my $a = "\c{ack}";
1423 EXPECT
1424 OPTION fatal
1425 Use ";" instead of "\c{" at - line 9, within string
1426 Execution of - aborted due to compilation errors.
1427 ########
1428 # toke.c
1429 BEGIN {
1430     if (ord('A') == 65) {
1431         print "SKIPPED\n# test is EBCDIC-specific";
1432         exit 0;
1433     }
1434 }
1435 use warnings;
1436 my $a = "\c{ack}";
1437 EXPECT
1438 OPTION fatal
1439 Sequence "\c{" invalid at - line 9, within string
1440 Execution of - aborted due to compilation errors.
1441 ########
1442 # toke.c
1443 my $a = "\câ";
1444 EXPECT
1445 OPTION fatal
1446 Character following "\c" must be printable ASCII at - line 2, within string
1447 Execution of - aborted due to compilation errors.
1448 ########
1449 # toke.c
1450 use warnings 'syntax' ;
1451 my $a = qr/foo/du;
1452 $a = qr/foo/lai;
1453 $a = qr/foo/lil;
1454 $a = qr/foo/aia;
1455 $a = qr/foo/aaia;
1456 no warnings 'syntax' ;
1457 my $a = qr/foo/du;
1458 EXPECT
1459 Regexp modifiers "/d" and "/u" are mutually exclusive at - line 3, near "= "
1460 Regexp modifiers "/l" and "/a" are mutually exclusive at - line 4, near "= "
1461 Regexp modifier "/l" may not appear twice at - line 5, near "= "
1462 Regexp modifier "/a" may appear a maximum of twice at - line 7, near "= "
1463 BEGIN not safe after errors--compilation aborted at - line 8.
1464 ########
1465 # toke.c
1466 # [perl #4362]
1467 eval "no warnings 'deprecated'; print q\xabfoo";
1468 if ($@ =~ /Can't find string terminator "\xab" anywhere before EOF/) {
1469     print "ok\n";
1470 }
1471 else {
1472     print "not ok $@\n";
1473 }
1474 EXPECT
1475 ok
1476 ########
1477 # toke.c
1478 use utf8;
1479 use open qw( :utf8 :std );
1480 use warnings 'ambiguous' ;
1481 sub frèd {}
1482 $a = ${frèd} ;
1483 no warnings 'ambiguous' ;
1484 $a = ${frèd} ;
1485 EXPECT
1486 Ambiguous use of ${frèd} resolved to $frèd at - line 6.
1487 ########
1488 # toke.c
1489 use utf8;
1490 use open qw( :utf8 :std );
1491 use warnings 'ambiguous' ;
1492 sub f렏 {}
1493 $a = ${f렏} ;
1494 no warnings 'ambiguous' ;
1495 $a = ${f렏} ;
1496 EXPECT
1497 Ambiguous use of ${f렏} resolved to $f렏 at - line 6.
1498 ########
1499 # toke.c
1500 use utf8;
1501 use open qw( :utf8 :std );
1502 use warnings;
1503 CORE::렏;
1504 EXPECT
1505 CORE::렏 is not a keyword at - line 5.
1506 ########
1507 # toke.c
1508 # [perl #16249]
1509 print '';
1510 eval this_method_is_fake ();
1511 EXPECT
1512 Undefined subroutine &main::this_method_is_fake called at - line 4.
1513 ########
1514 # toke.c
1515 # [perl #107002] Erroneous ambiguity warnings
1516 sub { # do not actually call require
1517   require a::b . 1; # These used to produce erroneous
1518   require a::b + 1; # ambiguity warnings.
1519 }
1520 EXPECT
1521 ########
1522 # toke.c
1523 # [perl #113094], [perl #119101], since reverted so no warnings generated
1524 use warnings;
1525 print "aa" =~ m{^a\{1,2\}$}, "A\n";
1526 print "aa" =~ m{^a\x\{61\}$}, "B\n";
1527 print "a\\x{6F}" =~ m{^a\\x\{6F\}$}, "C\n";
1528 print "a\\o" =~ m{^a\\\x\{6F\}$}, "D\n";
1529 print "a\\\\x{6F}" =~ m{^a\\\\x\{6F\}$}, "E\n";
1530 print "a\\\\o"     =~ m{^a\\\\\x\{6F\}$}, "F\n";
1531 print "aa" =~ m{^a{1,2}$}, "G\n";
1532 print "aq" =~ m[^a\[a-z\]$], "H\n";
1533 print "aq" =~ m(^a\(q\)$), "I\n";
1534 EXPECT
1535 Non-hex character '\\' terminates \x early.  Resolved as "\x00\\" in regex; marked by <-- HERE in m/^a\x <-- HERE \{61\}$/ at - line 5.
1536 Non-hex character '\\' terminates \x early.  Resolved as "\x00\\" in regex; marked by <-- HERE in m/^a\\\x <-- HERE \{6F\}$/ at - line 7.
1537 Non-hex character '\\' terminates \x early.  Resolved as "\x00\\" in regex; marked by <-- HERE in m/^a\\\\\x <-- HERE \{6F\}$/ at - line 9.
1538 A
1539 B
1540 1C
1541 D
1542 1E
1543 F
1544 1G
1545 H
1546 I
1547 ########
1548 # toke.c
1549 #[perl #119123] disallow literal control character variables
1550 *{
1551     Foo
1552 }; # shouldn't warn on {\n, even though \n is a control character
1553 EXPECT
1554 ########
1555 # toke.c
1556 # [perl #120288] -X at start of line gave spurious warning, where X is not
1557 # a filetest operator
1558 -a;
1559 ;-a;
1560 EXPECT
1561 ########
1562 # toke.c
1563 # [perl #124113] Compile-time warning with UTF8 variable in array index
1564 use warnings;
1565 use utf8;
1566 my $𝛃 = 0;
1567 my @array = (0);
1568 my $v = $array[ 0 + $𝛃 ];
1569    $v = $array[ $𝛃 + 0 ];
1570 EXPECT
1571 ########
1572 # toke.c
1573 # Allow Unicode here doc boundaries
1574 use warnings;
1575 use utf8;
1576 my $v = <<EnFraçais;
1577 Comme ca!
1578 EnFraçais
1579 print $v;
1580 EXPECT
1581 Comme ca!
1582 ########
1583 # toke.c
1584 # Fix 'Use of "..." without parentheses is ambiguous' warning for
1585 # Unicode function names.  If not under PERL_UNICODE, this will generate
1586 # a "Wide character" warning
1587 use utf8;
1588 use warnings;
1589 sub 𝛃(;$) { return 0; }
1590 my $v = 𝛃 - 5;
1591 EXPECT
1592 OPTION regex
1593 (Wide character.*\n)?Warning: Use of "𝛃" without parentheses is ambiguous
1594 ########
1595 # RT #4346 Case 1: Warnings for print (...)
1596 # TODO RT #4346: Warnings for print(...) are inconsistent
1597 use warnings;
1598 print ("((\n");
1599 print (">>\n");
1600 EXPECT
1601 print (...) interpreted as function at - line 3.
1602 print (...) interpreted as function at - line 4.
1603 ((
1604 >>
1605 ########
1606 # RT #4346 Case 2: Warnings for print (...)
1607 use warnings;
1608 print ("((\n");
1609 print (">>\n")
1610 EXPECT
1611 print (...) interpreted as function at - line 3.
1612 print (...) interpreted as function at - line 4.
1613 ((
1614 >>
1615 ########
1616 # RT #4346 Case 3: Warnings for print (...)
1617 # TODO RT #4346: Warnings for print(...) are inconsistent
1618 use warnings;
1619 print (">>\n");
1620 print ("((\n");
1621 EXPECT
1622 print (...) interpreted as function at - line 3.
1623 print (...) interpreted as function at - line 4.
1624 >>
1625 ((
1626 ########
1627 # RT #4346 Case 4: Warnings for print (...)
1628 # TODO RT #4346: Warnings for print(...) are inconsistent
1629 use warnings;
1630 print (")\n");
1631 print ("))\n");
1632 EXPECT
1633 print (...) interpreted as function at - line 3.
1634 print (...) interpreted as function at - line 4.
1635 )
1636 ))
1637 ########
1638 # NAME  Non-grapheme delimiters
1639 BEGIN{
1640     if (ord('A') == 193) {
1641         print "SKIPPED\n# ebcdic platforms generates different Malformed UTF-8 warnings.";
1642         exit 0;
1643     }
1644 }
1645 use utf8;
1646 my $a = qr ̂foobar̂;
1647 EXPECT
1648 Use of unassigned code point or non-standalone grapheme for a delimiter is not allowed at - line 8, near "= "
1649 Execution of - aborted due to compilation errors.
1650 ########
1651 # NAME  [perl #130567] Assertion failure
1652 BEGIN {
1653     if (ord('A') != 65) {
1654         print "SKIPPED\n# test is ASCII-specific";
1655         exit 0;
1656     }
1657 }
1658 no warnings "uninitialized";
1659 $_= "";
1660 s//\3000/;
1661 s//"\x{180};;s\221(*$@$`\241\275";/gee;
1662 s//"s\221\302\302\302\302\302\302\302$@\241\275";/gee;
1663 EXPECT
1664 ########
1665 # NAME  [perl #130666] Assertion failure
1666 no warnings "uninitialized";
1667 BEGIN{$^H=-1};my $l; s\0$0[$l]\0\0
1668 EXPECT
1669 ########
1670 # NAME  [perl #129036] Assertion failure
1671 BEGIN{$0="";$^H=hex join""=>A00000}p?
1672 EXPECT
1673 OPTION fatal
1674 syntax error at - line 1, at EOF
1675 Execution of - aborted due to compilation errors.
1676 ########
1677 # NAME  [perl #130655]
1678 use utf8;
1679 qw∘foo ∞ ♥ bar∘
1680 EXPECT
1681 ########
1682 # NAME  [perl #134064]
1683 BEGIN {
1684     if (ord('A') == 193) {
1685         print "SKIPPED\n# test is ASCII-specific, but could be extended to EBCDIC";
1686         exit 0;
1687     }
1688 }
1689 use utf8;
1690 $foo="m'\302'";
1691 eval $foo ;
1692 print "The eval did not crash the program\n"
1693 EXPECT
1694 OPTION regex
1695 Malformed UTF-8 character: .*non-continuation.*
1696 The eval did not crash the program
1697 ########
1698 # NAME [perl #133850] print $fh $1 in s///e expression
1699 use warnings;
1700 my $fh = \*STDOUT;
1701 $_ = "abc";
1702 s/(x)/ print $fh $1 /e;
1703 EXPECT
1704 ########
1705 # NAME [perl #133850] side case
1706 use warnings;
1707 my $fh = \*STDOUT;
1708 my $y = "";
1709 my $x = "${print $fh $y; \'x'}";
1710 EXPECT
1711 ########
1712 # NAME [perl #133850] another case
1713 use warnings;
1714 my $time = 1;
1715 $_ = "";
1716 s/^/ ${time} /e
1717 EXPECT
1718 Ambiguous use of ${time} resolved to $time at - line 4.
1719 ########
1720 # NAME [perl #133850] another case
1721 use warnings;
1722 %x = qw(a b c d);
1723 $_ = "";
1724 s/^/ @x {a} /e
1725 EXPECT
1726 Scalar value @x{"a"} better written as $x{"a"} at - line 4.
1727 ########
1728 # NAME Warn on 32-bit code points
1729 # SKIP ? $Config{uvsize} < 8
1730 use warnings 'portable';
1731 my $a = "\x{8000_0000}";
1732 my $b = "\o{20_000_000_000}";
1733 EXPECT
1734 Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable at - line 2.
1735 Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable at - line 3.
1736 ########
1737 # NAME Check that our Multidimensional array heuristic doesn't false positive on function calls
1738 use warnings;
1739 my $str= "rst";
1740 my $substr= "s";
1741 my @array="A".."C";
1742 # force a numeric warning, but we should NOT see a Multidimensional warning here
1743 my $trigger_num_warn= $array[index $str,$substr] + 1;
1744 # this should trigger a Multidimensional warning
1745 my $should_warn_multi= $array[0x1,0x2];
1746 EXPECT
1747 Multidimensional syntax $array[0x1,0x2] not supported at - line 8.
1748 Argument "B" isn't numeric in addition (+) at - line 6.
1749 ########
1750 # NAME extra paired delimiters Latin1 range in UTF-8
1751 BEGIN { binmode STDERR, ":utf8" }
1752 use utf8;
1753 use feature 'extra_paired_delimiters';
1754 no warnings 'experimental::extra_paired_delimiters';
1755 my $good = q<this string uses ASCII delimiter; no warning>;
1756 my $good2 = q«this string has mirrored delimiters in either order»;
1757 my $good3 = q»and reversed«;
1758 no feature 'extra_paired_delimiters';
1759 my $warn3 = q«this string starts and ends with the lhs terminator«;
1760 my $warn4 = q»this string starts and ends with the rhs mirror»;
1761 EXPECT
1762 Use of '«' is deprecated as a string delimiter at - line 9.
1763 Use of '»' is deprecated as a string delimiter at - line 10.
1764 ########
1765 # NAME extra paired delimiters above Latin1 range
1766 BEGIN { binmode STDERR, ":utf8" }
1767 use utf8;
1768 use feature 'extra_paired_delimiters';
1769 no warnings 'experimental::extra_paired_delimiters';
1770 my $good = q<this string uses ASCII delimiter; no warning>;
1771 my $good2 = q《this string has a mirrored terminator》;
1772 my $warn2 = q》this string starts and ends with the rhs mirror》;
1773 my $good3 = q‹this string has mirrored delimiters in either order›;
1774 my $good3 = q›and reversed‹;
1775 no feature 'extra_paired_delimiters';
1776 my $warn3 = q《this string starts and ends with the lhs terminator《;
1777 my $warn4 = q》this string starts and ends with the rhs mirror》;
1778 my $warn5 = q‹this string starts and ends with the lhs terminator‹;
1779 my $warn6 = q›this string starts and ends with the rhs mirror›;
1780 EXPECT
1781 Use of '》' is deprecated as a string delimiter at - line 7.
1782 Use of '《' is deprecated as a string delimiter at - line 11.
1783 Use of '》' is deprecated as a string delimiter at - line 12.
1784 Use of '‹' is deprecated as a string delimiter at - line 13.
1785 Use of '›' is deprecated as a string delimiter at - line 14.
1786 ########