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