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
1 toke.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 
17         use warnings 'syntax' ;
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
55      chmod() mode argument is missing initial 0 
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
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 ;
116      
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
132 __END__
133 # toke.c 
134 use warnings 'deprecated' ;
135 1 if $a EQ $b ;
136 1 if $a NE $b ;
137 1 if $a GT $b ;
138 1 if $a LT $b ;
139 1 if $a GE $b ;
140 1 if $a LE $b ;
141 no warnings 'deprecated' ;
142 1 if $a EQ $b ;
143 1 if $a NE $b ;
144 1 if $a GT $b ;
145 1 if $a LT $b ;
146 1 if $a GE $b ;
147 1 if $a LE $b ;
148 EXPECT
149 Use of EQ is deprecated at - line 3.
150 Use of NE is deprecated at - line 4.
151 Use of GT is deprecated at - line 5.
152 Use of LT is deprecated at - line 6.
153 Use of GE is deprecated at - line 7.
154 Use of LE is deprecated at - line 8.
155 ########
156 # toke.c
157 use warnings 'deprecated' ;
158 format STDOUT =
159 @<<<  @|||  @>>>  @>>>
160 $a    $b    "abc" 'def'
161 .
162 no warnings 'deprecated' ;
163 format STDOUT =
164 @<<<  @|||  @>>>  @>>>
165 $a    $b    "abc" 'def'
166 .
167 EXPECT
168 Use of comma-less variable list is deprecated at - line 5.
169 Use of comma-less variable list is deprecated at - line 5.
170 Use of comma-less variable list is deprecated at - line 5.
171 ########
172 # toke.c
173 use warnings 'deprecated' ;
174 $a = <<;
175
176 no warnings 'deprecated' ;
177 $a = <<;
178
179 EXPECT
180 Use of bare << to mean <<"" is deprecated at - line 3.
181 ########
182 # toke.c
183 use warnings 'syntax' ;
184 s/(abc)/\1/;
185 no warnings 'syntax' ;
186 s/(abc)/\1/;
187 EXPECT
188 \1 better written as $1 at - line 3.
189 ########
190 # toke.c
191 use warnings 'semicolon' ;
192 $a = 1
193 &time ;
194 no warnings 'semicolon' ;
195 $a = 1
196 &time ;
197 EXPECT
198 Semicolon seems to be missing at - line 3.
199 ########
200 # toke.c
201 BEGIN {
202     # Scalars leaked: due to syntax errors
203     $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
204 }
205 use warnings 'syntax' ;
206 my $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 ;
216 EXPECT
217 Reversed += operator at - line 7.
218 Reversed -= operator at - line 8.
219 Reversed *= operator at - line 9.
220 Reversed %= operator at - line 10.
221 Reversed &= operator at - line 11.
222 Reversed .= operator at - line 12.
223 Reversed ^= operator at - line 13.
224 Reversed |= operator at - line 14.
225 Reversed <= operator at - line 15.
226 syntax error at - line 12, near "=."
227 syntax error at - line 13, near "=^"
228 syntax error at - line 14, near "=|"
229 Unterminated <> operator at - line 15.
230 ########
231 # toke.c
232 BEGIN {
233     # Scalars leaked: due to syntax errors
234     $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
235 }
236 no warnings 'syntax' ;
237 my $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 ;
247 EXPECT
248 syntax error at - line 12, near "=."
249 syntax error at - line 13, near "=^"
250 syntax error at - line 14, near "=|"
251 Unterminated <> operator at - line 15.
252 ########
253 # toke.c
254 use warnings 'syntax' ;
255 my $a = $a[1,2] ;
256 no warnings 'syntax' ;
257 my $a = $a[1,2] ;
258 EXPECT
259 Multidimensional syntax $a[1,2] not supported at - line 3.
260 ########
261 # toke.c
262 use warnings 'syntax' ;
263 sub fred {} ; $SIG{TERM} = fred;
264 no warnings 'syntax' ;
265 $SIG{TERM} = fred;
266 EXPECT
267 You need to quote "fred" at - line 3.
268 ########
269 # toke.c
270 use warnings 'syntax' ;
271 @a[3] = 2;
272 @a{3} = 2;
273 no warnings 'syntax' ;
274 @a[3] = 2;
275 @a{3} = 2;
276 EXPECT
277 Scalar value @a[3] better written as $a[3] at - line 3.
278 Scalar value @a{3} better written as $a{3} at - line 4.
279 ########
280 # toke.c
281 use warnings 'syntax' ;
282 $_ = "ab" ; 
283 s/(ab)/\1/e;
284 no warnings 'syntax' ;
285 $_ = "ab" ; 
286 s/(ab)/\1/e;
287 EXPECT
288 Can't use \1 to mean $1 in expression at - line 4.
289 ########
290 # toke.c
291 use warnings 'reserved' ;
292 $a = abc;
293 $a = { def
294
295 => 1 };
296 no warnings 'reserved' ;
297 $a = abc;
298 EXPECT
299 Unquoted string "abc" may clash with future reserved word at - line 3.
300 ########
301 # toke.c
302 use warnings 'chmod' ;
303 chmod 3;
304 no warnings 'chmod' ;
305 chmod 3;
306 EXPECT
307 chmod() mode argument is missing initial 0 at - line 3.
308 ########
309 # toke.c
310 use warnings 'qw' ;
311 @a = qw(a, b, c) ;
312 no warnings 'qw' ;
313 @a = qw(a, b, c) ;
314 EXPECT
315 Possible attempt to separate words with commas at - line 3.
316 ########
317 # toke.c
318 use warnings 'qw' ;
319 @a = qw(a b #) ;
320 no warnings 'qw' ;
321 @a = qw(a b #) ;
322 EXPECT
323 Possible attempt to put comments in qw() list at - line 3.
324 ########
325 # toke.c
326 use warnings 'umask' ;
327 umask 3;
328 no warnings 'umask' ;
329 umask 3;
330 EXPECT
331 umask: argument is missing initial 0 at - line 3.
332 ########
333 # toke.c
334 use warnings 'syntax' ;
335 print ("")
336 EXPECT
337 print (...) interpreted as function at - line 3.
338 ########
339 # toke.c
340 no warnings 'syntax' ;
341 print ("")
342 EXPECT
343
344 ########
345 # toke.c
346 use warnings 'syntax' ;
347 printf ("")
348 EXPECT
349 printf (...) interpreted as function at - line 3.
350 ########
351 # toke.c
352 no warnings 'syntax' ;
353 printf ("")
354 EXPECT
355
356 ########
357 # toke.c
358 use warnings 'syntax' ;
359 sort ("")
360 EXPECT
361 sort (...) interpreted as function at - line 3.
362 ########
363 # toke.c
364 no warnings 'syntax' ;
365 sort ("")
366 EXPECT
367
368 ########
369 # toke.c
370 use warnings 'ambiguous' ;
371 $a = ${time[2]};
372 no warnings 'ambiguous' ;
373 $a = ${time[2]};
374 EXPECT
375 Ambiguous use of ${time[...]} resolved to $time[...] at - line 3.
376 ########
377 # toke.c
378 use warnings 'ambiguous' ;
379 $a = ${time{2}};
380 EXPECT
381 Ambiguous use of ${time{...}} resolved to $time{...} at - line 3.
382 ########
383 # toke.c
384 no warnings 'ambiguous' ;
385 $a = ${time{2}};
386 EXPECT
387
388 ########
389 # toke.c
390 use warnings 'ambiguous' ;
391 $a = ${time} ;
392 no warnings 'ambiguous' ;
393 $a = ${time} ;
394 EXPECT
395 Ambiguous use of ${time} resolved to $time at - line 3.
396 ########
397 # toke.c
398 use warnings 'ambiguous' ;
399 sub fred {}
400 $a = ${fred} ;
401 no warnings 'ambiguous' ;
402 $a = ${fred} ;
403 EXPECT
404 Ambiguous use of ${fred} resolved to $fred at - line 4.
405 ########
406 # toke.c
407 use warnings 'syntax' ;
408 $a = 1_2;
409 $a = 1_2345_6;
410 no warnings 'syntax' ;
411 $a = 1_2;
412 $a = 1_2345_6;
413 EXPECT
414 Misplaced _ in number at - line 3.
415 Misplaced _ in number at - line 4.
416 Misplaced _ in number at - line 4.
417 ########
418 # toke.c
419 use warnings 'bareword' ;
420 #line 25 "bar"
421 $a = FRED:: ;
422 no warnings 'bareword' ;
423 #line 25 "bar"
424 $a = FRED:: ;
425 EXPECT
426 Bareword "FRED::" refers to nonexistent package at bar line 25.
427 ########
428 # toke.c
429 use warnings 'ambiguous' ;
430 sub time {}
431 my $a = time() ;
432 no warnings 'ambiguous' ;
433 my $b = time() ;
434 EXPECT
435 Ambiguous call resolved as CORE::time(), qualify as such or use & at - line 4.
436 ########
437 # toke.c
438 use warnings ;
439 eval <<'EOE';
440 {
441 #line 30 "foo"
442   $_ = " \x{123} " ;
443 }
444 EOE
445 EXPECT
446
447 ########
448 # toke.c
449 my $a = rand + 4 ;
450 EXPECT
451 Warning: Use of "rand" without parens is ambiguous at - line 2.
452 ########
453 # toke.c
454 $^W = 0 ;
455 my $a = rand + 4 ;
456 {
457     no warnings 'ambiguous' ;
458     $a = rand + 4 ;
459     use warnings 'ambiguous' ;
460     $a = rand + 4 ;
461 }
462 $a = rand + 4 ;
463 EXPECT
464 Warning: Use of "rand" without parens is ambiguous at - line 3.
465 Warning: Use of "rand" without parens is ambiguous at - line 8.
466 Warning: Use of "rand" without parens is ambiguous at - line 10.
467 ########
468 # toke.c
469 sub fred {};
470 -fred ;
471 EXPECT
472 Ambiguous use of -fred resolved as -&fred() at - line 3.
473 ########
474 # toke.c
475 $^W = 0 ;
476 sub fred {} ;
477 -fred ;
478 {
479     no warnings 'ambiguous' ;
480     -fred ;
481     use warnings 'ambiguous' ;
482     -fred ;
483 }
484 -fred ;
485 EXPECT
486 Ambiguous use of -fred resolved as -&fred() at - line 4.
487 Ambiguous use of -fred resolved as -&fred() at - line 9.
488 Ambiguous use of -fred resolved as -&fred() at - line 11.
489 ########
490 # toke.c
491 open FOO || time;
492 EXPECT
493 Precedence problem: open FOO should be open(FOO) at - line 2.
494 ########
495 # toke.c
496 $^W = 0 ;
497 open FOO || time;
498 {
499     no warnings 'precedence' ;
500     open FOO || time;
501     use warnings 'precedence' ;
502     open FOO || time;
503 }
504 open FOO || time;
505 EXPECT
506 Precedence problem: open FOO should be open(FOO) at - line 3.
507 Precedence problem: open FOO should be open(FOO) at - line 8.
508 Precedence problem: open FOO should be open(FOO) at - line 10.
509 ########
510 # toke.c
511 $^W = 0 ;
512 *foo *foo ;
513 {
514     no warnings 'ambiguous' ;
515     *foo *foo ;
516     use warnings 'ambiguous' ;
517     *foo *foo ;
518 }
519 *foo *foo ;
520 EXPECT
521 Operator or semicolon missing before *foo at - line 3.
522 Ambiguous use of * resolved as operator * at - line 3.
523 Operator or semicolon missing before *foo at - line 8.
524 Ambiguous use of * resolved as operator * at - line 8.
525 Operator or semicolon missing before *foo at - line 10.
526 Ambiguous use of * resolved as operator * at - line 10.
527 ########
528 # toke.c
529 use warnings 'misc' ;
530 my $a = "\m" ;
531 no warnings 'misc' ;
532 $a = "\m" ;
533 EXPECT
534 Unrecognized escape \m passed through at - line 3.
535 ########
536 # toke.c
537 use warnings 'portable' ;
538 my $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 ;
547 no 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 ;
557 EXPECT
558 Binary number > 0b11111111111111111111111111111111 non-portable at - line 5.
559 Hexadecimal number > 0xffffffff non-portable at - line 8.
560 Octal number > 037777777777 non-portable at - line 11.
561 ########
562 # toke.c
563 use warnings 'overflow' ;
564 my $a =  0b011111111111111111111111111111110 ;
565    $a =  0b011111111111111111111111111111111 ;
566    $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
567    $a =  0x0fffffffe ;
568    $a =  0x0ffffffff ;
569    $a =  0x10000000000000000 ;
570    $a =  0037777777776 ;
571    $a =  0037777777777 ;
572    $a =  002000000000000000000000;
573 no warnings 'overflow' ;
574    $a =  0b011111111111111111111111111111110 ;
575    $a =  0b011111111111111111111111111111111 ;
576    $a =  0b10000000000000000000000000000000000000000000000000000000000000000 ;
577    $a =  0x0fffffffe ;
578    $a =  0x0ffffffff ;
579    $a =  0x10000000000000000 ;
580    $a =  0037777777776 ;
581    $a =  0037777777777 ;
582    $a =  002000000000000000000000;
583 EXPECT
584 Integer overflow in binary number at - line 5.
585 Integer overflow in hexadecimal number at - line 8.
586 Integer overflow in octal number at - line 11.