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