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