This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
autoquote barewords followed by newline and arrow properly
[perl5.git] / t / pragma / warn / toke
CommitLineData
599cee73
PM
1toke.c AOK
2
3 we seem to have lost a few ambiguous warnings!!
4
5
6 1 if $a EQ $b ;
7 1 if $a NE $b ;
8 1 if $a LT $b ;
9 1 if $a GT $b ;
10 1 if $a GE $b ;
11 1 if $a LE $b ;
12 $a = <<;
13 Use of comma-less variable list is deprecated
14 (called 3 times via depcom)
15
16 \1 better written as $1
4438c4b7 17 use warnings 'syntax' ;
599cee73
PM
18 s/(abc)/\1/;
19
20 warn(warn_nosemi)
21 Semicolon seems to be missing
22 $a = 1
23 &time ;
24
25
26 Reversed %c= operator
27 my $a =+ 2 ;
28 $a =- 2 ;
29 $a =* 2 ;
30 $a =% 2 ;
31 $a =& 2 ;
32 $a =. 2 ;
33 $a =^ 2 ;
34 $a =| 2 ;
35 $a =< 2 ;
36 $a =/ 2 ;
37
38 Multidimensional syntax %.*s not supported
39 my $a = $a[1,2] ;
40
41 You need to quote \"%s\""
42 sub fred {} ; $SIG{TERM} = fred;
43
44 Scalar value %.*s better written as $%.*s"
45 @a[3] = 2;
46 @a{3} = 2;
47
48 Can't use \\%c to mean $%c in expression
49 $_ = "ab" ; s/(ab)/\1/e;
50
51 Unquoted string "abc" may clash with future reserved word at - line 3.
52 warn(warn_reserved
53 $a = abc;
54
073ca4f1 55 chmod() mode argument is missing initial 0
599cee73
PM
56 chmod 3;
57
58 Possible attempt to separate words with commas
59 @a = qw(a, b, c) ;
60
61 Possible attempt to put comments in qw() list
62 @a = qw(a b # c) ;
63
64 umask: argument is missing initial 0
65 umask 3;
66
67 %s (...) interpreted as function
68 print ("")
69 printf ("")
70 sort ("")
71
72 Ambiguous use of %c{%s%s} resolved to %c%s%s
73 $a = ${time[2]}
74 $a = ${time{2}}
75
76
77 Ambiguous use of %c{%s} resolved to %c%s
78 $a = ${time}
79 sub fred {} $a = ${fred}
80
81 Misplaced _ in number
82 $a = 1_2;
83 $a = 1_2345_6;
84
85 Bareword \"%s\" refers to nonexistent package
86 $a = FRED:: ;
87
88 Ambiguous call resolved as CORE::%s(), qualify as such or use &
89 sub time {}
90 my $a = time()
91
767a6a26
PM
92 Unrecognized escape \\%c passed through
93 $a = "\m" ;
94
95 %s number > %s non-portable
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 Integer overflow in binary number
107 my $a = 0b011111111111111111111111111111110 ;
108 $a = 0b011111111111111111111111111111111 ;
109 $a = 0b111111111111111111111111111111111 ;
110 $a = 0x0fffffffe ;
111 $a = 0x0ffffffff ;
112 $a = 0x1ffffffff ;
113 $a = 0037777777776 ;
114 $a = 0037777777777 ;
115 $a = 0047777777777 ;
599cee73 116
0453d815
PM
117 Mandatory Warnings
118 ------------------
119 Use of "%s" without parentheses is ambiguous [check_uni]
120 rand + 4
121
122 Ambiguous use of -%s resolved as -&%s() [yylex]
123 sub fred {} ; - fred ;
124
125 Precedence problem: open %.*s should be open(%.*s) [yylex]
126 open FOO || die;
127
128 Operator or semicolon missing before %c%s [yylex]
129 Ambiguous use of %c resolved as operator %c
130 *foo *foo
131
599cee73
PM
132__END__
133# toke.c
4438c4b7 134use warnings 'deprecated' ;
599cee73
PM
1351 if $a EQ $b ;
1361 if $a NE $b ;
1371 if $a GT $b ;
1381 if $a LT $b ;
1391 if $a GE $b ;
1401 if $a LE $b ;
4438c4b7 141no warnings 'deprecated' ;
0453d815
PM
1421 if $a EQ $b ;
1431 if $a NE $b ;
1441 if $a GT $b ;
1451 if $a LT $b ;
1461 if $a GE $b ;
1471 if $a LE $b ;
599cee73
PM
148EXPECT
149Use of EQ is deprecated at - line 3.
150Use of NE is deprecated at - line 4.
151Use of GT is deprecated at - line 5.
152Use of LT is deprecated at - line 6.
153Use of GE is deprecated at - line 7.
154Use of LE is deprecated at - line 8.
155########
156# toke.c
4438c4b7 157use warnings 'deprecated' ;
599cee73
PM
158format STDOUT =
159@<<< @||| @>>> @>>>
160$a $b "abc" 'def'
161.
4438c4b7 162no warnings 'deprecated' ;
0453d815
PM
163format STDOUT =
164@<<< @||| @>>> @>>>
165$a $b "abc" 'def'
166.
599cee73
PM
167EXPECT
168Use of comma-less variable list is deprecated at - line 5.
169Use of comma-less variable list is deprecated at - line 5.
170Use of comma-less variable list is deprecated at - line 5.
599cee73
PM
171########
172# toke.c
4438c4b7 173use warnings 'deprecated' ;
599cee73
PM
174$a = <<;
175
4438c4b7 176no warnings 'deprecated' ;
0453d815
PM
177$a = <<;
178
599cee73
PM
179EXPECT
180Use of bare << to mean <<"" is deprecated at - line 3.
181########
182# toke.c
4438c4b7 183use warnings 'syntax' ;
599cee73 184s/(abc)/\1/;
4438c4b7 185no warnings 'syntax' ;
0453d815 186s/(abc)/\1/;
599cee73
PM
187EXPECT
188\1 better written as $1 at - line 3.
189########
190# toke.c
4438c4b7 191use warnings 'semicolon' ;
599cee73
PM
192$a = 1
193&time ;
4438c4b7 194no warnings 'semicolon' ;
0453d815
PM
195$a = 1
196&time ;
599cee73
PM
197EXPECT
198Semicolon seems to be missing at - line 3.
199########
200# toke.c
e4050d25
GS
201BEGIN {
202 # Scalars leaked: due to syntax errors
203 $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
204}
4438c4b7 205use warnings 'syntax' ;
599cee73
PM
206my $a =+ 2 ;
207$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 ;
216EXPECT
e4050d25
GS
217Reversed += operator at - line 7.
218Reversed -= operator at - line 8.
219Reversed *= operator at - line 9.
220Reversed %= operator at - line 10.
221Reversed &= operator at - line 11.
222Reversed .= operator at - line 12.
e4050d25 223Reversed ^= operator at - line 13.
e4050d25 224Reversed |= operator at - line 14.
e4050d25 225Reversed <= operator at - line 15.
24944567
GS
226syntax error at - line 12, near "=."
227syntax error at - line 13, near "=^"
228syntax error at - line 14, near "=|"
e4050d25 229Unterminated <> operator at - line 15.
599cee73
PM
230########
231# toke.c
0453d815
PM
232BEGIN {
233 # Scalars leaked: due to syntax errors
234 $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
235}
4438c4b7 236no warnings 'syntax' ;
0453d815
PM
237my $a =+ 2 ;
238$a =- 2 ;
239$a =* 2 ;
240$a =% 2 ;
241$a =& 2 ;
242$a =. 2 ;
243$a =^ 2 ;
244$a =| 2 ;
245$a =< 2 ;
246$a =/ 2 ;
247EXPECT
248syntax error at - line 12, near "=."
249syntax error at - line 13, near "=^"
250syntax error at - line 14, near "=|"
251Unterminated <> operator at - line 15.
252########
253# toke.c
4438c4b7 254use warnings 'syntax' ;
599cee73 255my $a = $a[1,2] ;
4438c4b7 256no warnings 'syntax' ;
0453d815 257my $a = $a[1,2] ;
599cee73
PM
258EXPECT
259Multidimensional syntax $a[1,2] not supported at - line 3.
260########
261# toke.c
4438c4b7 262use warnings 'syntax' ;
599cee73 263sub fred {} ; $SIG{TERM} = fred;
4438c4b7 264no warnings 'syntax' ;
0453d815 265$SIG{TERM} = fred;
599cee73
PM
266EXPECT
267You need to quote "fred" at - line 3.
268########
269# toke.c
4438c4b7 270use warnings 'syntax' ;
599cee73
PM
271@a[3] = 2;
272@a{3} = 2;
4438c4b7 273no warnings 'syntax' ;
0453d815
PM
274@a[3] = 2;
275@a{3} = 2;
599cee73
PM
276EXPECT
277Scalar value @a[3] better written as $a[3] at - line 3.
278Scalar value @a{3} better written as $a{3} at - line 4.
279########
280# toke.c
4438c4b7 281use warnings 'syntax' ;
599cee73
PM
282$_ = "ab" ;
283s/(ab)/\1/e;
4438c4b7 284no warnings 'syntax' ;
0453d815
PM
285$_ = "ab" ;
286s/(ab)/\1/e;
599cee73
PM
287EXPECT
288Can't use \1 to mean $1 in expression at - line 4.
289########
290# toke.c
4438c4b7 291use warnings 'reserved' ;
599cee73 292$a = abc;
1c3923b3
GS
293$a = { def
294
295=> 1 };
4438c4b7 296no warnings 'reserved' ;
0453d815 297$a = abc;
599cee73
PM
298EXPECT
299Unquoted string "abc" may clash with future reserved word at - line 3.
300########
301# toke.c
e476b1b5 302use warnings 'chmod' ;
599cee73 303chmod 3;
e476b1b5 304no warnings 'chmod' ;
0453d815 305chmod 3;
599cee73 306EXPECT
073ca4f1 307chmod() mode argument is missing initial 0 at - line 3.
599cee73
PM
308########
309# toke.c
e476b1b5 310use warnings 'qw' ;
599cee73 311@a = qw(a, b, c) ;
e476b1b5 312no warnings 'qw' ;
0453d815 313@a = qw(a, b, c) ;
599cee73
PM
314EXPECT
315Possible attempt to separate words with commas at - line 3.
316########
317# toke.c
e476b1b5 318use warnings 'qw' ;
599cee73 319@a = qw(a b #) ;
e476b1b5 320no warnings 'qw' ;
0453d815 321@a = qw(a b #) ;
599cee73
PM
322EXPECT
323Possible attempt to put comments in qw() list at - line 3.
324########
325# toke.c
e476b1b5 326use warnings 'umask' ;
599cee73 327umask 3;
e476b1b5 328no warnings 'umask' ;
0453d815 329umask 3;
599cee73 330EXPECT
4438c4b7 331umask: argument is missing initial 0 at - line 3.
599cee73
PM
332########
333# toke.c
4438c4b7 334use warnings 'syntax' ;
599cee73
PM
335print ("")
336EXPECT
337print (...) interpreted as function at - line 3.
338########
339# toke.c
4438c4b7 340no warnings 'syntax' ;
0453d815
PM
341print ("")
342EXPECT
343
344########
345# toke.c
4438c4b7 346use warnings 'syntax' ;
599cee73
PM
347printf ("")
348EXPECT
349printf (...) interpreted as function at - line 3.
350########
351# toke.c
4438c4b7 352no warnings 'syntax' ;
0453d815
PM
353printf ("")
354EXPECT
355
356########
357# toke.c
4438c4b7 358use warnings 'syntax' ;
599cee73
PM
359sort ("")
360EXPECT
361sort (...) interpreted as function at - line 3.
362########
363# toke.c
4438c4b7 364no warnings 'syntax' ;
0453d815
PM
365sort ("")
366EXPECT
367
368########
369# toke.c
4438c4b7 370use warnings 'ambiguous' ;
599cee73 371$a = ${time[2]};
4438c4b7 372no warnings 'ambiguous' ;
0453d815 373$a = ${time[2]};
599cee73
PM
374EXPECT
375Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
376########
377# toke.c
4438c4b7 378use warnings 'ambiguous' ;
599cee73
PM
379$a = ${time{2}};
380EXPECT
381Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
382########
383# toke.c
4438c4b7 384no warnings 'ambiguous' ;
0453d815
PM
385$a = ${time{2}};
386EXPECT
387
388########
389# toke.c
4438c4b7 390use warnings 'ambiguous' ;
599cee73 391$a = ${time} ;
4438c4b7 392no warnings 'ambiguous' ;
0453d815 393$a = ${time} ;
599cee73
PM
394EXPECT
395Ambiguous use of ${time} resolved to $time at - line 3.
396########
397# toke.c
4438c4b7 398use warnings 'ambiguous' ;
599cee73
PM
399sub fred {}
400$a = ${fred} ;
4438c4b7 401no warnings 'ambiguous' ;
0453d815 402$a = ${fred} ;
599cee73
PM
403EXPECT
404Ambiguous use of ${fred} resolved to $fred at - line 4.
405########
406# toke.c
4438c4b7 407use warnings 'syntax' ;
599cee73
PM
408$a = 1_2;
409$a = 1_2345_6;
4438c4b7 410no warnings 'syntax' ;
0453d815
PM
411$a = 1_2;
412$a = 1_2345_6;
599cee73
PM
413EXPECT
414Misplaced _ in number at - line 3.
415Misplaced _ in number at - line 4.
416Misplaced _ in number at - line 4.
417########
418# toke.c
e476b1b5 419use warnings 'bareword' ;
60e6418e 420#line 25 "bar"
599cee73 421$a = FRED:: ;
e476b1b5 422no warnings 'bareword' ;
0453d815
PM
423#line 25 "bar"
424$a = FRED:: ;
599cee73 425EXPECT
60e6418e 426Bareword "FRED::" refers to nonexistent package at bar line 25.
599cee73
PM
427########
428# toke.c
4438c4b7 429use warnings 'ambiguous' ;
599cee73 430sub time {}
0453d815 431my $a = time() ;
4438c4b7 432no warnings 'ambiguous' ;
0453d815 433my $b = time() ;
599cee73
PM
434EXPECT
435Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4.
436########
437# toke.c
26d16222 438use warnings ;
0453d815
PM
439eval <<'EOE';
440{
441#line 30 "foo"
442 $_ = " \x{123} " ;
443}
444EOE
445EXPECT
446
447########
448# toke.c
0453d815
PM
449my $a = rand + 4 ;
450EXPECT
451Warning: Use of "rand" without parens is ambiguous at - line 2.
452########
453# toke.c
454$^W = 0 ;
455my $a = rand + 4 ;
456{
4438c4b7 457 no warnings 'ambiguous' ;
0453d815 458 $a = rand + 4 ;
4438c4b7 459 use warnings 'ambiguous' ;
0453d815
PM
460 $a = rand + 4 ;
461}
462$a = rand + 4 ;
463EXPECT
464Warning: Use of "rand" without parens is ambiguous at - line 3.
465Warning: Use of "rand" without parens is ambiguous at - line 8.
466Warning: Use of "rand" without parens is ambiguous at - line 10.
467########
468# toke.c
469sub fred {};
470-fred ;
471EXPECT
472Ambiguous use of -fred resolved as -&fred() at - line 3.
473########
474# toke.c
475$^W = 0 ;
476sub fred {} ;
477-fred ;
478{
4438c4b7 479 no warnings 'ambiguous' ;
0453d815 480 -fred ;
4438c4b7 481 use warnings 'ambiguous' ;
0453d815
PM
482 -fred ;
483}
484-fred ;
485EXPECT
486Ambiguous use of -fred resolved as -&fred() at - line 4.
487Ambiguous use of -fred resolved as -&fred() at - line 9.
488Ambiguous use of -fred resolved as -&fred() at - line 11.
489########
490# toke.c
491open FOO || time;
492EXPECT
493Precedence problem: open FOO should be open(FOO) at - line 2.
494########
495# toke.c
496$^W = 0 ;
497open FOO || time;
498{
e476b1b5 499 no warnings 'precedence' ;
0453d815 500 open FOO || time;
e476b1b5 501 use warnings 'precedence' ;
0453d815
PM
502 open FOO || time;
503}
504open FOO || time;
505EXPECT
506Precedence problem: open FOO should be open(FOO) at - line 3.
507Precedence problem: open FOO should be open(FOO) at - line 8.
508Precedence problem: open FOO should be open(FOO) at - line 10.
509########
510# toke.c
511$^W = 0 ;
512*foo *foo ;
513{
4438c4b7 514 no warnings 'ambiguous' ;
0453d815 515 *foo *foo ;
4438c4b7 516 use warnings 'ambiguous' ;
0453d815
PM
517 *foo *foo ;
518}
519*foo *foo ;
520EXPECT
521Operator or semicolon missing before *foo at - line 3.
522Ambiguous use of * resolved as operator * at - line 3.
523Operator or semicolon missing before *foo at - line 8.
524Ambiguous use of * resolved as operator * at - line 8.
525Operator or semicolon missing before *foo at - line 10.
526Ambiguous use of * resolved as operator * at - line 10.
767a6a26
PM
527########
528# toke.c
e476b1b5 529use warnings 'misc' ;
767a6a26 530my $a = "\m" ;
e476b1b5 531no warnings 'misc' ;
767a6a26
PM
532$a = "\m" ;
533EXPECT
534Unrecognized escape \m passed through at - line 3.
535########
536# toke.c
537use warnings 'portable' ;
538my $a = 0b011111111111111111111111111111110 ;
539 $a = 0b011111111111111111111111111111111 ;
540 $a = 0b111111111111111111111111111111111 ;
541 $a = 0x0fffffffe ;
542 $a = 0x0ffffffff ;
543 $a = 0x1ffffffff ;
544 $a = 0037777777776 ;
545 $a = 0037777777777 ;
546 $a = 0047777777777 ;
547no warnings 'portable' ;
548 $a = 0b011111111111111111111111111111110 ;
549 $a = 0b011111111111111111111111111111111 ;
550 $a = 0b111111111111111111111111111111111 ;
551 $a = 0x0fffffffe ;
552 $a = 0x0ffffffff ;
553 $a = 0x1ffffffff ;
554 $a = 0037777777776 ;
555 $a = 0037777777777 ;
556 $a = 0047777777777 ;
557EXPECT
558Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
559Hexadecimal number > 0xffffffff non-portable at - line 8.
560Octal number > 037777777777 non-portable at - line 11.
561########
562# toke.c
563use warnings 'overflow' ;
564my $a = 0b011111111111111111111111111111110 ;
565 $a = 0b011111111111111111111111111111111 ;
15041a67 566 $a = 0b10000000000000000000000000000000000000000000000000000000000000000 ;
767a6a26
PM
567 $a = 0x0fffffffe ;
568 $a = 0x0ffffffff ;
15041a67 569 $a = 0x10000000000000000 ;
767a6a26
PM
570 $a = 0037777777776 ;
571 $a = 0037777777777 ;
15041a67 572 $a = 002000000000000000000000;
767a6a26
PM
573no warnings 'overflow' ;
574 $a = 0b011111111111111111111111111111110 ;
575 $a = 0b011111111111111111111111111111111 ;
15041a67 576 $a = 0b10000000000000000000000000000000000000000000000000000000000000000 ;
767a6a26
PM
577 $a = 0x0fffffffe ;
578 $a = 0x0ffffffff ;
15041a67 579 $a = 0x10000000000000000 ;
767a6a26
PM
580 $a = 0037777777776 ;
581 $a = 0037777777777 ;
15041a67 582 $a = 002000000000000000000000;
767a6a26
PM
583EXPECT
584Integer overflow in binary number at - line 5.
585Integer overflow in hexadecimal number at - line 8.
586Integer overflow in octal number at - line 11.