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