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