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