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