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