This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
3797b380126739fff5406e5da85eefb50410e89b
[perl5.git] / t / lib / warnings / op
1   op.c          AOK
2
3      Found = in conditional, should be ==
4         1 if $a = 1 ;
5
6      Useless use of time in void context
7      Useless use of a variable in void context
8      Useless use of a constant in void context
9         time ;
10         $a ;
11         "abc"
12
13      Useless use of sort in scalar context
14         my $x = sort (2,1,3);
15
16      Applying %s to %s will act on scalar(%s)
17         my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
18         @a =~ /abc/ ;
19         @a =~ s/a/b/ ;
20         @a =~ tr/a/b/ ;
21         @$b =~ /abc/ ;
22         @$b =~ s/a/b/ ;
23         @$b =~ tr/a/b/ ;
24         %a =~ /abc/ ;
25         %a =~ s/a/b/ ;
26         %a =~ tr/a/b/ ;
27         %$c =~ /abc/ ;
28         %$c =~ s/a/b/ ;
29         %$c =~ tr/a/b/ ;
30
31
32      Parentheses missing around "my" list at -e line 1.
33        my $a, $b = (1,2);
34  
35      Parentheses missing around "local" list at -e line 1.
36        local $a, $b = (1,2);
37  
38      Bareword found in conditional at -e line 1.
39        use warnings 'bareword'; my $x = print(ABC || 1);
40  
41      Value of %s may be \"0\"; use \"defined\" 
42         $x = 1 if $x = <FH> ;
43         $x = 1 while $x = <FH> ;
44
45      Subroutine fred redefined at -e line 1.
46        sub fred{1;} sub fred{1;}
47  
48      Constant subroutine %s redefined 
49         sub fred() {1;} sub fred() {1;}
50  
51      Format FRED redefined at /tmp/x line 5.
52        format FRED =
53        .
54        format FRED =
55        .
56  
57      Array @%s missing the @ in argument %d of %s() 
58         push fred ;
59  
60      Hash %%%s missing the %% in argument %d of %s() 
61         keys joe ;
62  
63      Statement unlikely to be reached
64         (Maybe you meant system() when you said exec()?
65         exec "true" ; my $a
66
67      defined(@array) is deprecated
68         (Maybe you should just omit the defined()?)
69         my @a ; defined @a ;
70         defined (@a = (1,2,3)) ;
71
72      defined(%hash) is deprecated
73         (Maybe you should just omit the defined()?)
74         my %h ; defined %h ;
75
76      $[ used in comparison (did you mean $] ?)
77     
78      /---/ should probably be written as "---"
79         join(/---/, @foo);
80
81     %s() called too early to check prototype            [Perl_peep]
82         fred() ; sub fred ($$) {}
83
84
85     Package `%s' not found (did you use the incorrect case?)
86
87     Use of /g modifier is meaningless in split
88
89     Possible precedence problem on bitwise %c operator  [Perl_ck_bitop]
90
91     Mandatory Warnings 
92     ------------------
93     Prototype mismatch:         [cv_ckproto]
94         sub fred() ;
95         sub fred($) {}
96
97     Runaway prototype           [newSUB]        TODO
98     oops: oopsAV                [oopsAV]        TODO
99     oops: oopsHV                [oopsHV]        TODO
100     
101 __END__
102 # op.c
103 use warnings 'syntax' ;
104 1 if $a = 1 ;
105 no warnings 'syntax' ;
106 1 if $a = 1 ;
107 EXPECT
108 Found = in conditional, should be == at - line 3.
109 ########
110 # op.c
111 use warnings 'syntax' ;
112 use constant foo => 1;
113 1 if $a = foo ;
114 no warnings 'syntax' ;
115 1 if $a = foo ;
116 EXPECT
117 ########
118 # op.c
119 my (@foo, %foo);
120 %main::foo->{"bar"};
121 %foo->{"bar"};
122 @main::foo->[23];
123 @foo->[23];
124 $main::foo = {}; %$main::foo->{"bar"};
125 $foo = {}; %$foo->{"bar"};
126 $main::foo = []; @$main::foo->[34];
127 $foo = []; @$foo->[34];
128 no warnings 'deprecated';
129 %main::foo->{"bar"};
130 %foo->{"bar"};
131 @main::foo->[23];
132 @foo->[23];
133 $main::foo = {}; %$main::foo->{"bar"};
134 $foo = {}; %$foo->{"bar"};
135 $main::foo = []; @$main::foo->[34];
136 $foo = []; @$foo->[34];
137 EXPECT
138 Using a hash as a reference is deprecated at - line 3.
139 Using a hash as a reference is deprecated at - line 4.
140 Using an array as a reference is deprecated at - line 5.
141 Using an array as a reference is deprecated at - line 6.
142 Using a hash as a reference is deprecated at - line 7.
143 Using a hash as a reference is deprecated at - line 8.
144 Using an array as a reference is deprecated at - line 9.
145 Using an array as a reference is deprecated at - line 10.
146 ########
147 # op.c
148 use warnings 'void' ; close STDIN ;
149 1 x 3 ;                 # OP_REPEAT
150                         # OP_GVSV
151 wantarray ;             # OP_WANTARRAY
152                         # OP_GV
153                         # OP_PADSV
154                         # OP_PADAV
155                         # OP_PADHV
156                         # OP_PADANY
157                         # OP_AV2ARYLEN
158 ref ;                   # OP_REF
159 \@a ;                   # OP_REFGEN
160 \$a ;                   # OP_SREFGEN
161 defined $a ;            # OP_DEFINED
162 hex $a ;                # OP_HEX
163 oct $a ;                # OP_OCT
164 length $a ;             # OP_LENGTH
165 substr $a,1 ;           # OP_SUBSTR
166 vec $a,1,2 ;            # OP_VEC
167 index $a,1,2 ;          # OP_INDEX
168 rindex $a,1,2 ;         # OP_RINDEX
169 sprintf $a ;            # OP_SPRINTF
170 $a[0] ;                 # OP_AELEM
171                         # OP_AELEMFAST
172 @a[0] ;                 # OP_ASLICE
173 #values %a ;            # OP_VALUES
174 #keys %a ;              # OP_KEYS
175 $a{0} ;                 # OP_HELEM
176 @a{0} ;                 # OP_HSLICE
177 unpack "a", "a" ;       # OP_UNPACK
178 pack $a,"" ;            # OP_PACK
179 join "" ;               # OP_JOIN
180 (@a)[0,1] ;             # OP_LSLICE
181                         # OP_ANONLIST
182                         # OP_ANONHASH
183 sort(1,2) ;             # OP_SORT
184 reverse(1,2) ;          # OP_REVERSE
185                         # OP_RANGE
186                         # OP_FLIP
187 (1 ..2) ;               # OP_FLOP
188 caller ;                # OP_CALLER
189 fileno STDIN ;          # OP_FILENO
190 eof STDIN ;             # OP_EOF
191 tell STDIN ;            # OP_TELL
192 readlink 1;             # OP_READLINK
193 time ;                  # OP_TIME
194 localtime ;             # OP_LOCALTIME
195 gmtime ;                # OP_GMTIME
196 eval { getgrnam 1 };    # OP_GGRNAM
197 eval { getgrgid 1 };    # OP_GGRGID
198 eval { getpwnam 1 };    # OP_GPWNAM
199 eval { getpwuid 1 };    # OP_GPWUID
200 prototype "foo";        # OP_PROTOTYPE
201 $a ~~ $b;               # OP_SMARTMATCH
202 $a <=> $b;              # OP_NCMP
203 EXPECT
204 Useless use of repeat (x) in void context at - line 3.
205 Useless use of wantarray in void context at - line 5.
206 Useless use of reference-type operator in void context at - line 12.
207 Useless use of reference constructor in void context at - line 13.
208 Useless use of single ref constructor in void context at - line 14.
209 Useless use of defined operator in void context at - line 15.
210 Useless use of hex in void context at - line 16.
211 Useless use of oct in void context at - line 17.
212 Useless use of length in void context at - line 18.
213 Useless use of substr in void context at - line 19.
214 Useless use of vec in void context at - line 20.
215 Useless use of index in void context at - line 21.
216 Useless use of rindex in void context at - line 22.
217 Useless use of sprintf in void context at - line 23.
218 Useless use of array element in void context at - line 24.
219 Useless use of array slice in void context at - line 26.
220 Useless use of hash element in void context at - line 29.
221 Useless use of hash slice in void context at - line 30.
222 Useless use of unpack in void context at - line 31.
223 Useless use of pack in void context at - line 32.
224 Useless use of join or string in void context at - line 33.
225 Useless use of list slice in void context at - line 34.
226 Useless use of sort in void context at - line 37.
227 Useless use of reverse in void context at - line 38.
228 Useless use of range (or flop) in void context at - line 41.
229 Useless use of caller in void context at - line 42.
230 Useless use of fileno in void context at - line 43.
231 Useless use of eof in void context at - line 44.
232 Useless use of tell in void context at - line 45.
233 Useless use of readlink in void context at - line 46.
234 Useless use of time in void context at - line 47.
235 Useless use of localtime in void context at - line 48.
236 Useless use of gmtime in void context at - line 49.
237 Useless use of getgrnam in void context at - line 50.
238 Useless use of getgrgid in void context at - line 51.
239 Useless use of getpwnam in void context at - line 52.
240 Useless use of getpwuid in void context at - line 53.
241 Useless use of subroutine prototype in void context at - line 54.
242 Useless use of smart match in void context at - line 55.
243 Useless use of numeric comparison (<=>) in void context at - line 56.
244 ########
245 # op.c
246 use warnings 'void' ; close STDIN ;
247 my $x = sort (2,1,3);
248 no warnings 'void' ;
249 $x = sort (2,1,3);
250 EXPECT
251 Useless use of sort in scalar context at - line 3.
252 ########
253 # op.c
254 no warnings 'void' ; close STDIN ;
255 1 x 3 ;                 # OP_REPEAT
256                         # OP_GVSV
257 wantarray ;             # OP_WANTARRAY
258                         # OP_GV
259                         # OP_PADSV
260                         # OP_PADAV
261                         # OP_PADHV
262                         # OP_PADANY
263                         # OP_AV2ARYLEN
264 ref ;                   # OP_REF
265 \@a ;                   # OP_REFGEN
266 \$a ;                   # OP_SREFGEN
267 defined $a ;            # OP_DEFINED
268 hex $a ;                # OP_HEX
269 oct $a ;                # OP_OCT
270 length $a ;             # OP_LENGTH
271 substr $a,1 ;           # OP_SUBSTR
272 vec $a,1,2 ;            # OP_VEC
273 index $a,1,2 ;          # OP_INDEX
274 rindex $a,1,2 ;         # OP_RINDEX
275 sprintf $a ;            # OP_SPRINTF
276 $a[0] ;                 # OP_AELEM
277                         # OP_AELEMFAST
278 @a[0] ;                 # OP_ASLICE
279 #values %a ;            # OP_VALUES
280 #keys %a ;              # OP_KEYS
281 $a{0} ;                 # OP_HELEM
282 @a{0} ;                 # OP_HSLICE
283 unpack "a", "a" ;       # OP_UNPACK
284 pack $a,"" ;            # OP_PACK
285 join "" ;               # OP_JOIN
286 (@a)[0,1] ;             # OP_LSLICE
287                         # OP_ANONLIST
288                         # OP_ANONHASH
289 sort(1,2) ;             # OP_SORT
290 reverse(1,2) ;          # OP_REVERSE
291                         # OP_RANGE
292                         # OP_FLIP
293 (1 ..2) ;               # OP_FLOP
294 caller ;                # OP_CALLER
295 fileno STDIN ;          # OP_FILENO
296 eof STDIN ;             # OP_EOF
297 tell STDIN ;            # OP_TELL
298 readlink 1;             # OP_READLINK
299 time ;                  # OP_TIME
300 localtime ;             # OP_LOCALTIME
301 gmtime ;                # OP_GMTIME
302 eval { getgrnam 1 };    # OP_GGRNAM
303 eval { getgrgid 1 };    # OP_GGRGID
304 eval { getpwnam 1 };    # OP_GPWNAM
305 eval { getpwuid 1 };    # OP_GPWUID
306 prototype "foo";        # OP_PROTOTYPE
307 EXPECT
308 ########
309 # op.c
310 use warnings 'void' ;
311 for (@{[0]}) { "$_" }           # check warning isn't duplicated
312 no warnings 'void' ;
313 for (@{[0]}) { "$_" }           # check warning isn't duplicated
314 EXPECT
315 Useless use of string in void context at - line 3.
316 ########
317 # op.c
318 use warnings 'void' ;
319 use Config ;
320 BEGIN {
321     if ( ! $Config{d_telldir}) {
322         print <<EOM ;
323 SKIPPED
324 # telldir not present
325 EOM
326         exit 
327     }
328 }
329 telldir 1 ;             # OP_TELLDIR
330 no warnings 'void' ;
331 telldir 1 ;             # OP_TELLDIR
332 EXPECT
333 Useless use of telldir in void context at - line 13.
334 ########
335 # op.c
336 use warnings 'void' ;
337 use Config ;
338 BEGIN {
339     if ( ! $Config{d_getppid}) {
340         print <<EOM ;
341 SKIPPED
342 # getppid not present
343 EOM
344         exit 
345     }
346 }
347 getppid ;               # OP_GETPPID
348 no warnings 'void' ;
349 getppid ;               # OP_GETPPID
350 EXPECT
351 Useless use of getppid in void context at - line 13.
352 ########
353 # op.c
354 use warnings 'void' ;
355 use Config ;
356 BEGIN {
357     if ( ! $Config{d_getpgrp}) {
358         print <<EOM ;
359 SKIPPED
360 # getpgrp not present
361 EOM
362         exit 
363     }
364 }
365 getpgrp ;               # OP_GETPGRP
366 no warnings 'void' ;
367 getpgrp ;               # OP_GETPGRP
368 EXPECT
369 Useless use of getpgrp in void context at - line 13.
370 ########
371 # op.c
372 use warnings 'void' ;
373 use Config ;
374 BEGIN {
375     if ( ! $Config{d_times}) {
376         print <<EOM ;
377 SKIPPED
378 # times not present
379 EOM
380         exit 
381     }
382 }
383 times ;                 # OP_TMS
384 no warnings 'void' ;
385 times ;                 # OP_TMS
386 EXPECT
387 Useless use of times in void context at - line 13.
388 ########
389 # op.c
390 use warnings 'void' ;
391 use Config ;
392 BEGIN {
393     if ( ! $Config{d_getprior} or $^O eq 'os2') { # Locks before fixpak22
394         print <<EOM ;
395 SKIPPED
396 # getpriority not present
397 EOM
398         exit 
399     }
400 }
401 getpriority 1,2;        # OP_GETPRIORITY
402 no warnings 'void' ;
403 getpriority 1,2;        # OP_GETPRIORITY
404 EXPECT
405 Useless use of getpriority in void context at - line 13.
406 ########
407 # op.c
408 use warnings 'void' ;
409 use Config ;
410 BEGIN {
411     if ( ! $Config{d_getlogin}) {
412         print <<EOM ;
413 SKIPPED
414 # getlogin not present
415 EOM
416         exit 
417     }
418 }
419 getlogin ;                      # OP_GETLOGIN
420 no warnings 'void' ;
421 getlogin ;                      # OP_GETLOGIN
422 EXPECT
423 Useless use of getlogin in void context at - line 13.
424 ########
425 # op.c
426 use warnings 'void' ;
427 use Config ; BEGIN {
428 if ( ! $Config{d_socket}) {
429     print <<EOM ;
430 SKIPPED
431 # getsockname not present
432 # getpeername not present
433 # gethostbyname not present
434 # gethostbyaddr not present
435 # gethostent not present
436 # getnetbyname not present
437 # getnetbyaddr not present
438 # getnetent not present
439 # getprotobyname not present
440 # getprotobynumber not present
441 # getprotoent not present
442 # getservbyname not present
443 # getservbyport not present
444 # getservent not present
445 EOM
446     exit 
447 } }
448 getsockname STDIN ;     # OP_GETSOCKNAME
449 getpeername STDIN ;     # OP_GETPEERNAME
450 gethostbyname 1 ;       # OP_GHBYNAME
451 gethostbyaddr 1,2;      # OP_GHBYADDR
452 gethostent ;            # OP_GHOSTENT
453 getnetbyname 1 ;        # OP_GNBYNAME
454 getnetbyaddr 1,2 ;      # OP_GNBYADDR
455 getnetent ;             # OP_GNETENT
456 getprotobyname 1;       # OP_GPBYNAME
457 getprotobynumber 1;     # OP_GPBYNUMBER
458 getprotoent ;           # OP_GPROTOENT
459 getservbyname 1,2;      # OP_GSBYNAME
460 getservbyport 1,2;      # OP_GSBYPORT
461 getservent ;            # OP_GSERVENT
462
463 no warnings 'void' ;
464 getsockname STDIN ;     # OP_GETSOCKNAME
465 getpeername STDIN ;     # OP_GETPEERNAME
466 gethostbyname 1 ;       # OP_GHBYNAME
467 gethostbyaddr 1,2;      # OP_GHBYADDR
468 gethostent ;            # OP_GHOSTENT
469 getnetbyname 1 ;        # OP_GNBYNAME
470 getnetbyaddr 1,2 ;      # OP_GNBYADDR
471 getnetent ;             # OP_GNETENT
472 getprotobyname 1;       # OP_GPBYNAME
473 getprotobynumber 1;     # OP_GPBYNUMBER
474 getprotoent ;           # OP_GPROTOENT
475 getservbyname 1,2;      # OP_GSBYNAME
476 getservbyport 1,2;      # OP_GSBYPORT
477 getservent ;            # OP_GSERVENT
478 INIT {
479    # some functions may not be there, so we exit without running
480    exit;
481 }
482 EXPECT
483 Useless use of getsockname in void context at - line 24.
484 Useless use of getpeername in void context at - line 25.
485 Useless use of gethostbyname in void context at - line 26.
486 Useless use of gethostbyaddr in void context at - line 27.
487 Useless use of gethostent in void context at - line 28.
488 Useless use of getnetbyname in void context at - line 29.
489 Useless use of getnetbyaddr in void context at - line 30.
490 Useless use of getnetent in void context at - line 31.
491 Useless use of getprotobyname in void context at - line 32.
492 Useless use of getprotobynumber in void context at - line 33.
493 Useless use of getprotoent in void context at - line 34.
494 Useless use of getservbyname in void context at - line 35.
495 Useless use of getservbyport in void context at - line 36.
496 Useless use of getservent in void context at - line 37.
497 ########
498 # op.c
499 use warnings 'void' ;
500 *a ; # OP_RV2GV
501 $a ; # OP_RV2SV
502 @a ; # OP_RV2AV
503 %a ; # OP_RV2HV
504 no warnings 'void' ;
505 *a ; # OP_RV2GV
506 $a ; # OP_RV2SV
507 @a ; # OP_RV2AV
508 %a ; # OP_RV2HV
509 EXPECT
510 Useless use of a variable in void context at - line 3.
511 Useless use of a variable in void context at - line 4.
512 Useless use of a variable in void context at - line 5.
513 Useless use of a variable in void context at - line 6.
514 ########
515 # op.c
516 use warnings 'void' ;
517 "abc"; # OP_CONST
518 7 ; # OP_CONST
519 "x" . "y"; # optimized to OP_CONST
520 2 + 2; # optimized to OP_CONST
521 use constant U => undef;
522 U;
523 5 || print "bad\n";     # test OPpCONST_SHORTCIRCUIT
524 print "boo\n" if U;     # test OPpCONST_SHORTCIRCUIT
525 no warnings 'void' ;
526 "abc"; # OP_CONST
527 7 ; # OP_CONST
528 "x" . "y"; # optimized to OP_CONST
529 2 + 2; # optimized to OP_CONST
530 EXPECT
531 Useless use of a constant (abc) in void context at - line 3.
532 Useless use of a constant (7) in void context at - line 4.
533 Useless use of a constant (xy) in void context at - line 5.
534 Useless use of a constant (4) in void context at - line 6.
535 Useless use of a constant (undef) in void context at - line 8.
536 ########
537 # op.c
538 use utf8;
539 use open qw( :utf8 :std );
540 use warnings 'void' ;
541 "àḆc"; # OP_CONST
542 "Ẋ" . "ƴ"; # optimized to OP_CONST
543 FOO;     # Bareword optimized to OP_CONST
544 use constant ů => undef;
545 ů;
546 5 || print "bad\n";     # test OPpCONST_SHORTCIRCUIT
547 print "boo\n" if ů;    # test OPpCONST_SHORTCIRCUIT
548 no warnings 'void' ;
549 "àḆc"; # OP_CONST
550 "Ẋ" . "ƴ"; # optimized to OP_CONST
551 EXPECT
552 Useless use of a constant (àḆc) in void context at - line 5.
553 Useless use of a constant (Ẋƴ) in void context at - line 6.
554 Useless use of a constant (FOO) in void context at - line 7.
555 Useless use of a constant (undef) in void context at - line 9.
556 ########
557 # op.c
558 #
559 use warnings 'misc' ;
560 my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;my $d = 'test';
561 @a =~ /abc/ ;
562 @a =~ s/a/b/ ;
563 @a =~ tr/a/b/ ;
564 @$b =~ /abc/ ;
565 @$b =~ s/a/b/ ;
566 @$b =~ tr/a/b/ ;
567 %a =~ /abc/ ;
568 %a =~ s/a/b/ ;
569 %a =~ tr/a/b/ ;
570 %$c =~ /abc/ ;
571 %$c =~ s/a/b/ ;
572 %$c =~ tr/a/b/ ;
573 $d =~ tr/a/b/d ;
574 $d =~ tr/a/bc/;
575 {
576 no warnings 'misc' ;
577 my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; my $d = 'test';
578 @a =~ /abc/ ;
579 @a =~ s/a/b/ ;
580 @a =~ tr/a/b/ ;
581 @$b =~ /abc/ ;
582 @$b =~ s/a/b/ ;
583 @$b =~ tr/a/b/ ;
584 %a =~ /abc/ ;
585 %a =~ s/a/b/ ;
586 %a =~ tr/a/b/ ;
587 %$c =~ /abc/ ;
588 %$c =~ s/a/b/ ;
589 %$c =~ tr/a/b/ ;
590 $d =~ tr/a/b/d ;
591 $d =~ tr/a/bc/ ;
592 }
593 EXPECT
594 Applying pattern match (m//) to @array will act on scalar(@array) at - line 5.
595 Applying substitution (s///) to @array will act on scalar(@array) at - line 6.
596 Applying transliteration (tr///) to @array will act on scalar(@array) at - line 7.
597 Applying pattern match (m//) to @array will act on scalar(@array) at - line 8.
598 Applying substitution (s///) to @array will act on scalar(@array) at - line 9.
599 Applying transliteration (tr///) to @array will act on scalar(@array) at - line 10.
600 Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 11.
601 Applying substitution (s///) to %hash will act on scalar(%hash) at - line 12.
602 Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 13.
603 Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 14.
604 Applying substitution (s///) to %hash will act on scalar(%hash) at - line 15.
605 Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 16.
606 Useless use of /d modifier in transliteration operator at - line 17.
607 Replacement list is longer than search list at - line 18.
608 Can't modify private array in substitution (s///) at - line 6, near "s/a/b/ ;"
609 BEGIN not safe after errors--compilation aborted at - line 20.
610 ########
611 # op.c
612 use warnings 'parenthesis' ;
613 my $a, $b = (1,2);
614 my @foo,%bar,   $quux; # there's a TAB here
615 my $x, $y or print;
616 no warnings 'parenthesis' ;
617 my $c, $d = (1,2);
618 EXPECT
619 Parentheses missing around "my" list at - line 3.
620 Parentheses missing around "my" list at - line 4.
621 ########
622 # op.c
623 use warnings 'parenthesis' ;
624 our $a, $b = (1,2);
625 no warnings 'parenthesis' ;
626 our $c, $d = (1,2);
627 EXPECT
628 Parentheses missing around "our" list at - line 3.
629 ########
630 # op.c
631 use warnings 'parenthesis' ;
632 local $a, $b = (1,2);
633 local *f, *g;
634 no warnings 'parenthesis' ;
635 local $c, $d = (1,2);
636 EXPECT
637 Parentheses missing around "local" list at - line 3.
638 Parentheses missing around "local" list at - line 4.
639 ########
640 # op.c
641 use warnings 'bareword' ;
642 print (ABC || 1) ;
643 no warnings 'bareword' ;
644 print (ABC || 1) ;
645 EXPECT
646 Bareword found in conditional at - line 3.
647 ########
648 --FILE-- abc
649
650 --FILE--
651 # op.c
652 use warnings 'misc' ;
653 open FH, "<abc" ;
654 $x = 1 if $x = <FH> ;
655 no warnings 'misc' ;
656 $x = 1 if $x = <FH> ;
657 EXPECT
658 Value of <HANDLE> construct can be "0"; test with defined() at - line 4.
659 ########
660 # op.c
661 use warnings 'misc' ;
662 opendir FH, "." ;
663 $x = 1 if $x = readdir FH ;
664 no warnings 'misc' ;
665 $x = 1 if $x = readdir FH ;
666 closedir FH ;
667 EXPECT
668 Value of readdir() operator can be "0"; test with defined() at - line 4.
669 ########
670 # op.c
671 use warnings 'misc' ;
672 $x = 1 if $x = <*> ;
673 no warnings 'misc' ;
674 $x = 1 if $x = <*> ;
675 EXPECT
676 Value of glob construct can be "0"; test with defined() at - line 3.
677 ########
678 # op.c
679 use warnings 'misc' ;
680 %a = (1,2,3,4) ;
681 $x = 1 if $x = each %a ;
682 no warnings 'misc' ;
683 $x = 1 if $x = each %a ;
684 EXPECT
685 Value of each() operator can be "0"; test with defined() at - line 4.
686 ########
687 # op.c
688 use warnings 'misc' ;
689 $x = 1 while $x = <*> and 0 ;
690 no warnings 'misc' ;
691 $x = 1 while $x = <*> and 0 ;
692 EXPECT
693 Value of glob construct can be "0"; test with defined() at - line 3.
694 ########
695 # op.c
696 use warnings 'misc' ;
697 opendir FH, "." ;
698 $x = 1 while $x = readdir FH and 0 ;
699 no warnings 'misc' ;
700 $x = 1 while $x = readdir FH and 0 ;
701 closedir FH ;
702 EXPECT
703 Value of readdir() operator can be "0"; test with defined() at - line 4.
704 ########
705 # op.c
706 use warnings 'misc';
707 open FH, "<abc";
708 ($_ = <FH>) // ($_ = 1);
709 opendir DH, ".";
710 %a = (1,2,3,4) ;
711 EXPECT
712 ########
713 # op.c
714 use warnings 'redefine' ;
715 sub fred {}
716 sub fred {}
717 no warnings 'redefine' ;
718 sub fred {}
719 EXPECT
720 Subroutine fred redefined at - line 4.
721 ########
722 # op.c
723 use warnings 'redefine' ;
724 sub fred () { 1 }
725 sub fred () { 1 }
726 no warnings 'redefine' ;
727 sub fred () { 1 }
728 EXPECT
729 Constant subroutine fred redefined at - line 4.
730 ########
731 # op.c
732 no warnings 'redefine' ;
733 sub fred () { 1 }
734 sub fred () { 2 }
735 EXPECT
736 Constant subroutine fred redefined at - line 4.
737 ########
738 # op.c
739 no warnings 'redefine' ;
740 sub fred () { 1 }
741 *fred = sub () { 2 };
742 EXPECT
743 Constant subroutine main::fred redefined at - line 4.
744 ########
745 # op.c
746 use warnings 'redefine' ;
747 format FRED =
748 .
749 format FRED =
750 .
751 no warnings 'redefine' ;
752 format FRED =
753 .
754 EXPECT
755 Format FRED redefined at - line 5.
756 ########
757 # op.c
758 push FRED;
759 no warnings 'deprecated' ;
760 push FRED;
761 EXPECT
762 Array @FRED missing the @ in argument 1 of push() at - line 2.
763 ########
764 # op.c
765 @a = keys FRED ;
766 no warnings 'deprecated' ;
767 @a = keys FRED ;
768 EXPECT
769 Hash %FRED missing the % in argument 1 of keys() at - line 2.
770 ########
771 # op.c
772 use warnings 'syntax' ;
773 exec "$^X -e 1" ; 
774 my $a
775 EXPECT
776 Statement unlikely to be reached at - line 4.
777         (Maybe you meant system() when you said exec()?)
778 ########
779 # op.c, no warning if exec isn't a statement.
780 use warnings 'syntax' ;
781 $a || exec "$^X -e 1" ;
782 my $a
783 EXPECT
784 ########
785 # op.c
786 my @a; defined(@a);
787 EXPECT
788 defined(@array) is deprecated at - line 2.
789         (Maybe you should just omit the defined()?)
790 ########
791 # op.c
792 defined(@a = (1,2,3));
793 EXPECT
794 defined(@array) is deprecated at - line 2.
795         (Maybe you should just omit the defined()?)
796 ########
797 # op.c
798 my %h; defined(%h);
799 EXPECT
800 defined(%hash) is deprecated at - line 2.
801         (Maybe you should just omit the defined()?)
802 ########
803 # op.c
804 no warnings 'syntax' ;
805 exec "$^X -e 1" ; 
806 my $a
807 EXPECT
808
809 ########
810 # op.c
811 sub fred();
812 sub fred($) {}
813 EXPECT
814 Prototype mismatch: sub main::fred () vs ($) at - line 3.
815 ########
816 # op.c
817 use utf8;
818 use open qw( :utf8 :std );
819 sub frèd();
820 sub frèd($) {}
821 EXPECT
822 Prototype mismatch: sub main::frèd () vs ($) at - line 5.
823 ########
824 # op.c
825 use utf8;
826 use open qw( :utf8 :std );
827 use warnings;
828 eval "sub fòò (\$\0) {}";
829 EXPECT
830 Illegal character in prototype for main::fòò : $\x{0} at (eval 1) line 1.
831 ########
832 # op.c
833 use utf8;
834 use open qw( :utf8 :std );
835 use warnings;
836 eval "sub foo (\0) {}";
837 EXPECT
838 Illegal character in prototype for main::foo : \x{0} at (eval 1) line 1.
839 ########
840 # op.c
841 use utf8;
842 use open qw( :utf8 :std );
843 use warnings;
844 BEGIN { $::{"foo"} = "\$\0L\351on" }
845 BEGIN { eval "sub foo (\$\0L\x{c3}\x{a9}on) {}"; }
846 EXPECT
847 Illegal character in prototype for main::foo : $\x{0}L... at (eval 1) line 1.
848 ########
849 # op.c
850 use utf8;
851 use open qw( :utf8 :std );
852 use warnings;
853 BEGIN { eval "sub foo (\0) {}"; }
854 EXPECT
855 Illegal character in prototype for main::foo : \x{0} at (eval 1) line 1.
856 ########
857 # op.c
858 use utf8;
859 use open qw( :utf8 :std );
860 use warnings;
861 BEGIN { $::{"foo"} = "\x{30cb}" }
862 BEGIN { eval "sub foo {}"; }
863 EXPECT
864 Prototype mismatch: sub main::foo (ニ) vs none at (eval 1) line 1.
865 ########
866 # op.c
867 $^W = 0 ;
868 sub fred() ;
869 sub fred($) {}
870 {
871     no warnings 'prototype' ;
872     sub Fred() ;
873     sub Fred($) {}
874     use warnings 'prototype' ;
875     sub freD() ;
876     sub freD($) {}
877 }
878 sub FRED() ;
879 sub FRED($) {}
880 EXPECT
881 Prototype mismatch: sub main::fred () vs ($) at - line 4.
882 Prototype mismatch: sub main::freD () vs ($) at - line 11.
883 Prototype mismatch: sub main::FRED () vs ($) at - line 14.
884 ########
885 # op.c [Perl_ck_cmp]
886 use warnings 'syntax' ;
887 no warnings 'deprecated';
888 @a = $[ < 5;
889 @a = $[ > 5;
890 @a = $[ <= 5;
891 @a = $[ >= 5;
892 @a = 42 < $[;
893 @a = 42 > $[;
894 @a = 42 <= $[;
895 @a = 42 >= $[;
896 use integer;
897 @a = $[ < 5;
898 @a = $[ > 5;
899 @a = $[ <= 5;
900 @a = $[ >= 5;
901 @a = 42 < $[;
902 @a = 42 > $[;
903 @a = 42 <= $[;
904 @a = 42 >= $[;
905 EXPECT
906 $[ used in numeric lt (<) (did you mean $] ?) at - line 4.
907 $[ used in numeric gt (>) (did you mean $] ?) at - line 5.
908 $[ used in numeric le (<=) (did you mean $] ?) at - line 6.
909 $[ used in numeric ge (>=) (did you mean $] ?) at - line 7.
910 $[ used in numeric lt (<) (did you mean $] ?) at - line 8.
911 $[ used in numeric gt (>) (did you mean $] ?) at - line 9.
912 $[ used in numeric le (<=) (did you mean $] ?) at - line 10.
913 $[ used in numeric ge (>=) (did you mean $] ?) at - line 11.
914 $[ used in numeric lt (<) (did you mean $] ?) at - line 13.
915 $[ used in numeric gt (>) (did you mean $] ?) at - line 14.
916 $[ used in numeric le (<=) (did you mean $] ?) at - line 15.
917 $[ used in numeric ge (>=) (did you mean $] ?) at - line 16.
918 $[ used in numeric lt (<) (did you mean $] ?) at - line 17.
919 $[ used in numeric gt (>) (did you mean $] ?) at - line 18.
920 $[ used in numeric le (<=) (did you mean $] ?) at - line 19.
921 $[ used in numeric ge (>=) (did you mean $] ?) at - line 20.
922 ########
923 # op.c
924 use warnings 'syntax' ;
925 join /---/, 'x', 'y', 'z';
926 EXPECT
927 /---/ should probably be written as "---" at - line 3.
928 ########
929 # op.c [Perl_peep]
930 use warnings 'prototype' ;
931 fred() ; 
932 sub fred ($$) {}
933 no warnings 'prototype' ;
934 joe() ; 
935 sub joe ($$) {}
936 EXPECT
937 main::fred() called too early to check prototype at - line 3.
938 ########
939 # op.c [Perl_newATTRSUB]
940 --FILE-- abc.pm
941 use warnings 'void' ;
942 BEGIN { $| = 1; print "in begin\n"; }
943 CHECK { print "in check\n"; }
944 INIT { print "in init\n"; }
945 END { print "in end\n"; }
946 print "in mainline\n";
947 1;
948 --FILE--
949 use abc;
950 delete $INC{"abc.pm"};
951 require abc;
952 do "abc.pm";
953 EXPECT
954 in begin
955 in mainline
956 in check
957 in init
958 in begin
959 Too late to run CHECK block at abc.pm line 3.
960 Too late to run INIT block at abc.pm line 4.
961 in mainline
962 in begin
963 Too late to run CHECK block at abc.pm line 3.
964 Too late to run INIT block at abc.pm line 4.
965 in mainline
966 in end
967 in end
968 in end
969 ########
970 # op.c [Perl_newATTRSUB]
971 --FILE-- abc.pm
972 no warnings 'void' ;
973 BEGIN { $| = 1; print "in begin\n"; }
974 CHECK { print "in check\n"; }
975 INIT { print "in init\n"; }
976 END { print "in end\n"; }
977 print "in mainline\n";
978 1;
979 --FILE--
980 require abc;
981 do "abc.pm";
982 EXPECT
983 in begin
984 in mainline
985 in begin
986 in mainline
987 in end
988 in end
989 ########
990 # op.c
991 my @x;
992 use warnings 'syntax' ;
993 push(@x);
994 unshift(@x);
995 no warnings 'syntax' ;
996 push(@x);
997 unshift(@x);
998 EXPECT
999 Useless use of push with no values at - line 4.
1000 Useless use of unshift with no values at - line 5.
1001 ########
1002 # op.c
1003 # 20020401 mjd@plover.com at suggestion of jfriedl@yahoo.com
1004 use warnings 'regexp';
1005 split /blah/g, "blah";
1006 no warnings 'regexp';
1007 split /blah/g, "blah";
1008 EXPECT
1009 Use of /g modifier is meaningless in split at - line 4.
1010 ########
1011 # op.c
1012 use warnings 'precedence';
1013 $a = $b & $c == $d;
1014 $a = $b ^ $c != $d;
1015 $a = $b | $c > $d;
1016 $a = $b < $c & $d;
1017 $a = $b >= $c ^ $d;
1018 $a = $b <= $c | $d;
1019 $a = $b <=> $c & $d;
1020 $a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn
1021 no warnings 'precedence';
1022 $a = $b & $c == $d;
1023 $a = $b ^ $c != $d;
1024 $a = $b | $c > $d;
1025 $a = $b < $c & $d;
1026 $a = $b >= $c ^ $d;
1027 $a = $b <= $c | $d;
1028 $a = $b <=> $c & $d;
1029 EXPECT
1030 Possible precedence problem on bitwise & operator at - line 3.
1031 Possible precedence problem on bitwise ^ operator at - line 4.
1032 Possible precedence problem on bitwise | operator at - line 5.
1033 Possible precedence problem on bitwise & operator at - line 6.
1034 Possible precedence problem on bitwise ^ operator at - line 7.
1035 Possible precedence problem on bitwise | operator at - line 8.
1036 Possible precedence problem on bitwise & operator at - line 9.
1037 ########
1038 # op.c
1039 use integer;
1040 use warnings 'precedence';
1041 $a = $b & $c == $d;
1042 $a = $b ^ $c != $d;
1043 $a = $b | $c > $d;
1044 $a = $b < $c & $d;
1045 $a = $b >= $c ^ $d;
1046 $a = $b <= $c | $d;
1047 $a = $b <=> $c & $d;
1048 no warnings 'precedence';
1049 $a = $b & $c == $d;
1050 $a = $b ^ $c != $d;
1051 $a = $b | $c > $d;
1052 $a = $b < $c & $d;
1053 $a = $b >= $c ^ $d;
1054 $a = $b <= $c | $d;
1055 $a = $b <=> $c & $d;
1056 EXPECT
1057 Possible precedence problem on bitwise & operator at - line 4.
1058 Possible precedence problem on bitwise ^ operator at - line 5.
1059 Possible precedence problem on bitwise | operator at - line 6.
1060 Possible precedence problem on bitwise & operator at - line 7.
1061 Possible precedence problem on bitwise ^ operator at - line 8.
1062 Possible precedence problem on bitwise | operator at - line 9.
1063 Possible precedence problem on bitwise & operator at - line 10.
1064 ########
1065 # op.c
1066
1067 # ok    => local() has desired effect;
1068 # ignore=> local() silently ignored
1069
1070 use warnings 'syntax';
1071
1072 local(undef);           # OP_UNDEF              ignore
1073 sub lval : lvalue {};
1074 local(lval());          # OP_ENTERSUB
1075 local($x **= 1);        # OP_POW
1076 local($x *=  1);        # OP_MULTIPLY
1077 local($x /=  1);        # OP_DIVIDE
1078 local($x %=  1);        # OP_MODULO
1079 local($x x=  1);        # OP_REPEAT
1080 local($x +=  1);        # OP_ADD
1081 local($x -=  1);        # OP_SUBTRACT
1082 local($x .=  1);        # OP_CONCAT
1083 local($x <<= 1);        # OP_LEFT_SHIFT
1084 local($x >>= 1);        # OP_RIGHT_SHIFT
1085 local($x &=  1);        # OP_BIT_AND
1086 local($x ^=  1);        # OP_BIT_XOR
1087 local($x |=  1);        # OP_BIT_OR
1088 {
1089     use integer;
1090     local($x *= 1);     # OP_I_MULTIPLY
1091     local($x /= 1);     # OP_I_DIVIDE
1092     local($x %= 1);     # OP_I_MODULO
1093     local($x += 1);     # OP_I_ADD
1094     local($x -= 1);     # OP_I_SUBTRACT
1095 }
1096 local($x?$y:$z) = 1;    # OP_COND_EXPR          ok
1097 # these two are fatal run-time errors instead
1098 #local(@$a);            # OP_RV2AV              ok
1099 #local(%$a);            # OP_RV2HV              ok
1100 local(*a);              # OP_RV2GV              ok
1101 local(@a[1,2]);         # OP_ASLICE             ok
1102 local(@a{1,2});         # OP_HSLICE             ok
1103 local(@a = (1,2));      # OP_AASSIGN
1104 local($$x);             # OP_RV2SV              ok
1105 local($#a);             # OP_AV2ARYLEN
1106 local($x =   1);        # OP_SASSIGN
1107 local($x &&= 1);        # OP_ANDASSIGN
1108 local($x ||= 1);        # OP_ORASSIGN
1109 local($x //= 1);        # OP_DORASSIGN
1110 local($a[0]);           # OP_AELEMFAST          ok
1111
1112 local(substr($x,0,1));  # OP_SUBSTR
1113 local(pos($x));         # OP_POS
1114 local(vec($x,0,1));     # OP_VEC
1115 local($a[$b]);          # OP_AELEM              ok
1116 local($a{$b});          # OP_HELEM              ok
1117
1118 no warnings 'syntax';
1119 EXPECT
1120 Useless localization of subroutine entry at - line 10.
1121 Useless localization of exponentiation (**) at - line 11.
1122 Useless localization of multiplication (*) at - line 12.
1123 Useless localization of division (/) at - line 13.
1124 Useless localization of modulus (%) at - line 14.
1125 Useless localization of repeat (x) at - line 15.
1126 Useless localization of addition (+) at - line 16.
1127 Useless localization of subtraction (-) at - line 17.
1128 Useless localization of concatenation (.) or string at - line 18.
1129 Useless localization of left bitshift (<<) at - line 19.
1130 Useless localization of right bitshift (>>) at - line 20.
1131 Useless localization of bitwise and (&) at - line 21.
1132 Useless localization of bitwise xor (^) at - line 22.
1133 Useless localization of bitwise or (|) at - line 23.
1134 Useless localization of integer multiplication (*) at - line 26.
1135 Useless localization of integer division (/) at - line 27.
1136 Useless localization of integer modulus (%) at - line 28.
1137 Useless localization of integer addition (+) at - line 29.
1138 Useless localization of integer subtraction (-) at - line 30.
1139 Useless localization of list assignment at - line 39.
1140 Useless localization of array length at - line 41.
1141 Useless localization of scalar assignment at - line 42.
1142 Useless localization of logical and assignment (&&=) at - line 43.
1143 Useless localization of logical or assignment (||=) at - line 44.
1144 Useless localization of defined or assignment (//=) at - line 45.
1145 Useless localization of substr at - line 48.
1146 Useless localization of match position at - line 49.
1147 Useless localization of vec at - line 50.
1148 ########
1149 # op.c
1150 my $x1 if 0;
1151 my @x2 if 0;
1152 my %x3 if 0;
1153 my ($x4) if 0;
1154 my ($x5,@x6, %x7) if 0;
1155 0 && my $z1;
1156 0 && my (%z2);
1157 # these shouldn't warn
1158 our $x if 0;
1159 our $x unless 0;
1160 if (0) { my $w1 }
1161 if (my $w2) { $a=1 }
1162 if ($a && (my $w3 = 1)) {$a = 2}
1163
1164 EXPECT
1165 Deprecated use of my() in false conditional at - line 2.
1166 Deprecated use of my() in false conditional at - line 3.
1167 Deprecated use of my() in false conditional at - line 4.
1168 Deprecated use of my() in false conditional at - line 5.
1169 Deprecated use of my() in false conditional at - line 6.
1170 Deprecated use of my() in false conditional at - line 7.
1171 Deprecated use of my() in false conditional at - line 8.
1172 ########
1173 # op.c
1174 $[ = 1;
1175 ($[) = 1;
1176 use warnings 'deprecated';
1177 $[ = 2;
1178 ($[) = 2;
1179 no warnings 'deprecated';
1180 $[ = 3;
1181 ($[) = 3;
1182 EXPECT
1183 Use of assignment to $[ is deprecated at - line 2.
1184 Use of assignment to $[ is deprecated at - line 3.
1185 Use of assignment to $[ is deprecated at - line 5.
1186 Use of assignment to $[ is deprecated at - line 6.
1187 ########
1188 # op.c
1189 use warnings 'void';
1190 @x = split /y/, "z";
1191 $x = split /y/, "z";
1192      split /y/, "z";
1193 no warnings 'void';
1194 @x = split /y/, "z";
1195 $x = split /y/, "z";
1196      split /y/, "z";
1197 EXPECT
1198 Useless use of split in void context at - line 5.
1199 ########
1200 # op.c
1201 use warnings 'redefine' ;
1202 use utf8;
1203 use open qw( :utf8 :std );
1204 sub frèd {}
1205 sub frèd {}
1206 no warnings 'redefine' ;
1207 sub frèd {}
1208 EXPECT
1209 Subroutine frèd redefined at - line 6.
1210 ########
1211 # op.c
1212 use warnings 'redefine' ;
1213 use utf8;
1214 use open qw( :utf8 :std );
1215 sub frèd () { 1 }
1216 sub frèd () { 1 }
1217 no warnings 'redefine' ;
1218 sub frèd () { 1 }
1219 EXPECT
1220 Constant subroutine frèd redefined at - line 6.
1221 ########
1222 # op.c
1223 no warnings 'redefine' ;
1224 use utf8;
1225 use open qw( :utf8 :std );
1226 sub frèd () { 1 }
1227 sub frèd () { 2 }
1228 EXPECT
1229 Constant subroutine frèd redefined at - line 6.
1230 ########
1231 # op.c
1232 no warnings 'redefine' ;
1233 use utf8;
1234 use open qw( :utf8 :std );
1235 sub frèd () { 1 }
1236 *frèd = sub () { 2 };
1237 EXPECT
1238 Constant subroutine main::frèd redefined at - line 6.
1239 ########
1240 # op.c
1241 use warnings 'redefine' ;
1242 use utf8;
1243 use open qw( :utf8 :std );
1244 sub ᚠርƊ {}
1245 sub ᚠርƊ {}
1246 no warnings 'redefine' ;
1247 sub ᚠርƊ {}
1248 EXPECT
1249 Subroutine ᚠርƊ redefined at - line 6.
1250 ########
1251 # op.c
1252 use warnings 'redefine' ;
1253 use utf8;
1254 use open qw( :utf8 :std );
1255 sub ᚠርƊ () { 1 }
1256 sub ᚠርƊ () { 1 }
1257 no warnings 'redefine' ;
1258 sub ᚠርƊ () { 1 }
1259 EXPECT
1260 Constant subroutine ᚠርƊ redefined at - line 6.
1261 ########
1262 # op.c
1263 no warnings 'redefine' ;
1264 use utf8;
1265 use open qw( :utf8 :std );
1266 sub ᚠርƊ () { 1 }
1267 sub ᚠርƊ () { 2 }
1268 EXPECT
1269 Constant subroutine ᚠርƊ redefined at - line 6.
1270 ########
1271 # op.c
1272 no warnings 'redefine' ;
1273 use utf8;
1274 use open qw( :utf8 :std );
1275 sub ᚠርƊ () { 1 }
1276 *ᚠርƊ = sub () { 2 };
1277 EXPECT
1278 Constant subroutine main::ᚠርƊ redefined at - line 6.
1279 ########