This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #127122] warn on unless (assignment) when syntax warnings are on
[perl5.git] / t / lib / warnings / op
1   op.c          AOK
2
3      Found = in conditional, should be ==
4         1 if $a = 1 ;
5
6      Scalar value %.*s better written as $%.*s" 
7         @a[3] = 2;
8         @a{3} = 2;
9
10      Useless use of time in void context
11      Useless use of a variable in void context
12      Useless use of a constant in void context
13         time ;
14         $a ;
15         "abc"
16
17      Useless use of sort in scalar context
18         my $x = sort (2,1,3);
19
20      Applying %s to %s will act on scalar(%s)
21         my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
22         @a =~ /abc/ ;
23         @a =~ s/a/b/ ;
24         @a =~ tr/a/b/ ;
25         @$b =~ /abc/ ;
26         @$b =~ s/a/b/ ;
27         @$b =~ tr/a/b/ ;
28         %a =~ /abc/ ;
29         %a =~ s/a/b/ ;
30         %a =~ tr/a/b/ ;
31         %$c =~ /abc/ ;
32         %$c =~ s/a/b/ ;
33         %$c =~ tr/a/b/ ;
34
35
36      Parentheses missing around "my" list at -e line 1.
37        my $a, $b = (1,2);
38  
39      Parentheses missing around "local" list at -e line 1.
40        local $a, $b = (1,2);
41  
42      Bareword found in conditional at -e line 1.
43        use warnings 'bareword'; my $x = print(ABC || 1);
44  
45      Value of %s may be \"0\"; use \"defined\" 
46         $x = 1 if $x = <FH> ;
47         $x = 1 while $x = <FH> ;
48
49      Subroutine fred redefined at -e line 1.
50        sub fred{1;} sub fred{1;}
51  
52      Constant subroutine %s redefined 
53         sub fred() {1;} sub fred() {1;}
54  
55      Format FRED redefined at /tmp/x line 5.
56        format FRED =
57        .
58        format FRED =
59        .
60  
61      Statement unlikely to be reached
62         (Maybe you meant system() when you said exec()?
63         exec "true" ; my $a
64
65      Can't use defined(@array) (Maybe you should just omit the defined()?)
66         my @a ; defined @a ;
67         defined (@a = (1,2,3)) ;
68
69      Can't use defined(%hash) (Maybe you should just omit the defined()?)
70         my %h ; defined %h ;
71
72      "my %s" used in sort comparison
73
74      $[ used in comparison (did you mean $] ?)
75
76      length() used on @array (did you mean "scalar(@array)"?)
77      length() used on %hash (did you mean "scalar(keys %hash)"?)
78
79      /---/ should probably be written as "---"
80         join(/---/, @foo);
81
82     %s() called too early to check prototype            [Perl_peep]
83         fred() ; sub fred ($$) {}
84
85
86     Package '%s' not found (did you use the incorrect case?)
87
88     Use of /g modifier is meaningless in split
89
90     The bitwise feature is experimental                 [Perl_ck_bitop]
91
92     Possible precedence problem on bitwise %c operator  [Perl_ck_bitop]
93
94     Mandatory Warnings 
95     ------------------
96     Prototype mismatch:         [cv_ckproto]
97         sub fred() ;
98         sub fred($) {}
99
100     oops: oopsAV                [oopsAV]        TODO
101     oops: oopsHV                [oopsHV]        TODO
102     
103 __END__
104 # op.c
105 use warnings 'syntax' ;
106 1 if $a = 1 ;
107 1 if $a
108   = 1 ;
109 no warnings 'syntax' ;
110 1 if $a = 1 ;
111 1 if $a
112   = 1 ;
113 EXPECT
114 Found = in conditional, should be == at - line 3.
115 Found = in conditional, should be == at - line 4.
116 ########
117 # op.c
118 use warnings 'syntax' ;
119 use constant foo => 1;
120 1 if $a = foo ;
121 no warnings 'syntax' ;
122 1 if $a = foo ;
123 EXPECT
124 ########
125 # op.c
126 # NAME unless with assignment as condition
127 use warnings 'syntax';
128 1 unless $a = 1;
129 unless ($a = 1) {
130     1;
131 }
132 EXPECT
133 Found = in conditional, should be == at - line 3.
134 Found = in conditional, should be == at - line 4.
135 ########
136 # op.c
137 use warnings 'syntax' ;
138 @a[3];
139 @a{3};
140 @a["]"];
141 @a{"]"};
142 @a["}"];
143 @a{"}"};
144 @a{$_};
145 @a{--$_};
146 @a[$_];
147 @a[--$_];
148 no warnings 'syntax' ;
149 @a[3];
150 @a{3};
151 EXPECT
152 Scalar value @a[3] better written as $a[3] at - line 3.
153 Scalar value @a{3} better written as $a{3} at - line 4.
154 Scalar value @a["]"] better written as $a["]"] at - line 5.
155 Scalar value @a{"]"} better written as $a{"]"} at - line 6.
156 Scalar value @a["}"] better written as $a["}"] at - line 7.
157 Scalar value @a{"}"} better written as $a{"}"} at - line 8.
158 Scalar value @a{...} better written as $a{...} at - line 9.
159 Scalar value @a{...} better written as $a{...} at - line 10.
160 Scalar value @a[...] better written as $a[...] at - line 11.
161 Scalar value @a[...] better written as $a[...] at - line 12.
162 ########
163 # op.c
164 use utf8;
165 use open qw( :utf8 :std );
166 use warnings 'syntax' ;
167 @à[3];
168 @à{3};
169 no warnings 'syntax' ;
170 @à[3];
171 @à{3};
172 EXPECT
173 Scalar value @à[3] better written as $à[3] at - line 5.
174 Scalar value @à{3} better written as $à{3} at - line 6.
175 ########
176 # op.c
177 use utf8;
178 use open qw( :utf8 :std );
179 use warnings 'syntax' ;
180 @ぁ[3];
181 @ぁ{3};
182 no warnings 'syntax' ;
183 @ぁ[3];
184 @ぁ{3};
185 EXPECT
186 Scalar value @ぁ[3] better written as $ぁ[3] at - line 5.
187 Scalar value @ぁ{3} better written as $ぁ{3} at - line 6.
188 ########
189 # op.c
190 # "Scalar value better written as" false positives
191 # [perl #28380] and [perl #114024]
192 use warnings 'syntax';
193
194 # hashes
195 @h{qw"a b c"} = 1..3;
196 @h{qw'a b c'} = 1..3;
197 @h{qw$a b c$} = 1..3;
198 @h{qw-a b c-} = 1..3;
199 @h{qw#a b c#} = 1..3;
200 @h{ qw#a b c#} = 1..3;
201 @h{     qw#a b c#} = 1..3; # tab before qw
202 @h{qw "a"};
203 @h{ qw "a"};
204 @h{     qw "a"};
205 sub foo() { qw/abc def ghi/ }
206 @X{+foo} = ( 1 .. 3 );
207 $_ = "abc"; @X{split ""} = ( 1 .. 3 );
208 my @s = @f{"}", "a"};
209 my @s = @f{"]", "a"};
210 @a{$],0};
211 @_{0} = /(.*)/;
212 @h{m "$re"};
213 @h{qx ""} if 0;
214 @h{glob ""};
215 @h{readline ""};
216 @h{m ""};
217 use constant phoo => 1..3;
218 @h{+phoo}; # rv2av
219 @h{sort foo};
220 @h{reverse foo};
221 @h{caller 0};
222 @h{lstat ""};
223 @h{stat ""};
224 @h{readdir ""};
225 @h{system ""} if 0;
226 @h{+times} if 0;
227 @h{localtime 0};
228 @h{gmtime 0};
229 @h{eval ""};
230
231 # arrays
232 @h[qw"a b c"] = 1..3;
233 @h[qw'a b c'] = 1..3;
234 @h[qw$a b c$] = 1..3;
235 @h[qw-a b c-] = 1..3;
236 @h[qw#a b c#] = 1..3;
237 @h[ qw#a b c#] = 1..3;
238 @h[     qw#a b c#] = 1..3; # tab before qw
239 @h[qw "a"];
240 @h[ qw "a"];
241 @h[     qw "a"];
242 sub foo() { qw/abc def ghi/ }
243 @X[+foo] = ( 1 .. 3 );
244 $_ = "abc"; @X[split ""] = ( 1 .. 3 );
245 my @s = @f["}", "a"];
246 my @s = @f["]", "a"];
247 @a[$],0];
248 @_[0] = /(.*)/;
249 @h[m "$re"];
250 @h[qx ""] if 0;
251 @h[glob ""];
252 @h[readline ""];
253 @h[m ""];
254 use constant phoo => 1..3;
255 @h[+phoo]; # rv2av
256 @h[sort foo];
257 @h[reverse foo];
258 @h[caller 0];
259 @h[lstat ""];
260 @h[stat ""];
261 @h[readdir ""];
262 @h[system ""] if 0;
263 @h[+times] if 0;
264 @h[localtime 0];
265 @h[gmtime 0];
266 @h[eval ""];
267 EXPECT
268 ########
269 # op.c
270 # "Scalar value better written as" should not trigger for syntax errors
271 use warnings 'syntax';
272 @a[]
273 EXPECT
274 syntax error at - line 4, near "[]"
275 Execution of - aborted due to compilation errors.
276 ########
277 # op.c
278 my %foo;
279 %main::foo->{"bar"};
280 EXPECT
281 OPTION fatal
282 Can't use a hash as a reference at - line 3.
283 ########
284 # op.c
285 my %foo;
286 %foo->{"bar"};
287 EXPECT
288 OPTION fatal
289 Can't use a hash as a reference at - line 3.
290 ########
291 # op.c
292 my @foo;
293 @main::foo->[23];
294 EXPECT
295 OPTION fatal
296 Can't use an array as a reference at - line 3.
297 ########
298 # op.c
299 my @foo;
300 @foo->[23];
301 EXPECT
302 OPTION fatal
303 Can't use an array as a reference at - line 3.
304 ########
305 # op.c
306 my %foo;
307 $main::foo = {}; %$main::foo->{"bar"};
308 EXPECT
309 OPTION fatal
310 Can't use a hash as a reference at - line 3.
311 ########
312 # op.c
313 my %foo;
314 $foo = {}; %$foo->{"bar"};
315 EXPECT
316 OPTION fatal
317 Can't use a hash as a reference at - line 3.
318 ########
319 # op.c
320 my @foo;
321 $main::foo = []; @$main::foo->[34];
322 EXPECT
323 OPTION fatal
324 Can't use an array as a reference at - line 3.
325 ########
326 # op.c
327 my @foo;
328 $foo = []; @$foo->[34];
329 EXPECT
330 OPTION fatal
331 Can't use an array as a reference at - line 3.
332 ########
333 # op.c
334 use warnings 'void' ; no warnings 'experimental::smartmatch'; close STDIN ;
335 #line 2
336 1 x 3 ;                 # OP_REPEAT (folded)
337 (1) x 3 ;               # OP_REPEAT
338                         # OP_GVSV
339 wantarray ;             # OP_WANTARRAY
340                         # OP_GV
341                         # OP_PADSV
342                         # OP_PADAV
343                         # OP_PADHV
344                         # OP_PADANY
345                         # OP_AV2ARYLEN
346 ref ;                   # OP_REF
347 \(@a) ;                 # OP_REFGEN
348 \$a ;                   # OP_SREFGEN
349 defined $a ;            # OP_DEFINED
350 hex $a ;                # OP_HEX
351 oct $a ;                # OP_OCT
352 length $a ;             # OP_LENGTH
353 substr $a,1 ;           # OP_SUBSTR
354 vec $a,1,2 ;            # OP_VEC
355 index $a,1,2 ;          # OP_INDEX
356 rindex $a,1,2 ;         # OP_RINDEX
357 sprintf $a ;            # OP_SPRINTF
358 $a[0] ;                 # OP_AELEM
359                         # OP_AELEMFAST
360 @a[0] ;                 # OP_ASLICE
361 #values %a ;            # OP_VALUES
362 #keys %a ;              # OP_KEYS
363 $a{0} ;                 # OP_HELEM
364 @a{0} ;                 # OP_HSLICE
365 unpack "a", "a" ;       # OP_UNPACK
366 pack $a,"" ;            # OP_PACK
367 join "", @_ ;           # OP_JOIN
368 (@a)[0,1] ;             # OP_LSLICE
369                         # OP_ANONLIST
370                         # OP_ANONHASH
371 sort(1,2) ;             # OP_SORT
372 reverse(1,2) ;          # OP_REVERSE
373                         # OP_RANGE
374                         # OP_FLIP
375 (1 ..2) ;               # OP_FLOP
376 caller ;                # OP_CALLER
377 fileno STDIN ;          # OP_FILENO
378 eof STDIN ;             # OP_EOF
379 tell STDIN ;            # OP_TELL
380 readlink 1;             # OP_READLINK
381 time ;                  # OP_TIME
382 localtime ;             # OP_LOCALTIME
383 gmtime ;                # OP_GMTIME
384 eval { getgrnam 1 };    # OP_GGRNAM
385 eval { getgrgid 1 };    # OP_GGRGID
386 eval { getpwnam 1 };    # OP_GPWNAM
387 eval { getpwuid 1 };    # OP_GPWUID
388 prototype "foo";        # OP_PROTOTYPE
389 $a ~~ $b;               # OP_SMARTMATCH
390 $a <=> $b;              # OP_NCMP
391 "dsatrewq";
392 "diatrewq";
393 "igatrewq";
394 use 5.015;
395 __SUB__ ;               # OP_RUNCV
396 [];                     # OP_ANONLIST
397 grep /42/, (1,2);       # OP_GREP. Not warned about (yet). Grep git logs for void_unusual to see why...
398 EXPECT
399 Useless use of a constant ("111") in void context at - line 2.
400 Useless use of repeat (x) in void context at - line 3.
401 Useless use of wantarray in void context at - line 5.
402 Useless use of reference-type operator in void context at - line 12.
403 Useless use of reference constructor in void context at - line 13.
404 Useless use of single ref constructor in void context at - line 14.
405 Useless use of defined operator in void context at - line 15.
406 Useless use of hex in void context at - line 16.
407 Useless use of oct in void context at - line 17.
408 Useless use of length in void context at - line 18.
409 Useless use of substr in void context at - line 19.
410 Useless use of vec in void context at - line 20.
411 Useless use of index in void context at - line 21.
412 Useless use of rindex in void context at - line 22.
413 Useless use of sprintf in void context at - line 23.
414 Useless use of array element in void context at - line 24.
415 Useless use of array slice in void context at - line 26.
416 Useless use of hash element in void context at - line 29.
417 Useless use of hash slice in void context at - line 30.
418 Useless use of unpack in void context at - line 31.
419 Useless use of pack in void context at - line 32.
420 Useless use of join or string in void context at - line 33.
421 Useless use of list slice in void context at - line 34.
422 Useless use of sort in void context at - line 37.
423 Useless use of reverse in void context at - line 38.
424 Useless use of range (or flop) in void context at - line 41.
425 Useless use of caller in void context at - line 42.
426 Useless use of fileno in void context at - line 43.
427 Useless use of eof in void context at - line 44.
428 Useless use of tell in void context at - line 45.
429 Useless use of readlink in void context at - line 46.
430 Useless use of time in void context at - line 47.
431 Useless use of localtime in void context at - line 48.
432 Useless use of gmtime in void context at - line 49.
433 Useless use of getgrnam in void context at - line 50.
434 Useless use of getgrgid in void context at - line 51.
435 Useless use of getpwnam in void context at - line 52.
436 Useless use of getpwuid in void context at - line 53.
437 Useless use of subroutine prototype in void context at - line 54.
438 Useless use of smart match in void context at - line 55.
439 Useless use of numeric comparison (<=>) in void context at - line 56.
440 Useless use of a constant ("dsatrewq") in void context at - line 57.
441 Useless use of a constant ("diatrewq") in void context at - line 58.
442 Useless use of a constant ("igatrewq") in void context at - line 59.
443 Useless use of __SUB__ in void context at - line 61.
444 Useless use of anonymous array ([]) in void context at - line 62.
445 ########
446 # op.c
447 use warnings 'void' ; close STDIN ;
448 my $x = sort (2,1,3);
449 no warnings 'void' ;
450 $x = sort (2,1,3);
451 EXPECT
452 Useless use of sort in scalar context at - line 3.
453 ########
454 # op.c
455 no warnings 'void' ; close STDIN ;
456 1 x 3 ;                 # OP_REPEAT
457                         # OP_GVSV
458 wantarray ;             # OP_WANTARRAY
459                         # OP_GV
460                         # OP_PADSV
461                         # OP_PADAV
462                         # OP_PADHV
463                         # OP_PADANY
464                         # OP_AV2ARYLEN
465 ref ;                   # OP_REF
466 \@a ;                   # OP_REFGEN
467 \$a ;                   # OP_SREFGEN
468 defined $a ;            # OP_DEFINED
469 hex $a ;                # OP_HEX
470 oct $a ;                # OP_OCT
471 length $a ;             # OP_LENGTH
472 substr $a,1 ;           # OP_SUBSTR
473 vec $a,1,2 ;            # OP_VEC
474 index $a,1,2 ;          # OP_INDEX
475 rindex $a,1,2 ;         # OP_RINDEX
476 sprintf $a ;            # OP_SPRINTF
477 $a[0] ;                 # OP_AELEM
478                         # OP_AELEMFAST
479 @a[0] ;                 # OP_ASLICE
480 #values %a ;            # OP_VALUES
481 #keys %a ;              # OP_KEYS
482 $a{0} ;                 # OP_HELEM
483 @a{0} ;                 # OP_HSLICE
484 unpack "a", "a" ;       # OP_UNPACK
485 pack $a,"" ;            # OP_PACK
486 join "" ;               # OP_JOIN
487 (@a)[0,1] ;             # OP_LSLICE
488                         # OP_ANONLIST
489                         # OP_ANONHASH
490 sort(1,2) ;             # OP_SORT
491 reverse(1,2) ;          # OP_REVERSE
492                         # OP_RANGE
493                         # OP_FLIP
494 (1 ..2) ;               # OP_FLOP
495 caller ;                # OP_CALLER
496 fileno STDIN ;          # OP_FILENO
497 eof STDIN ;             # OP_EOF
498 tell STDIN ;            # OP_TELL
499 readlink 1;             # OP_READLINK
500 time ;                  # OP_TIME
501 localtime ;             # OP_LOCALTIME
502 gmtime ;                # OP_GMTIME
503 eval { getgrnam 1 };    # OP_GGRNAM
504 eval { getgrgid 1 };    # OP_GGRGID
505 eval { getpwnam 1 };    # OP_GPWNAM
506 eval { getpwuid 1 };    # OP_GPWUID
507 prototype "foo";        # OP_PROTOTYPE
508 EXPECT
509 ########
510 # op.c
511 use warnings 'void' ;
512 for (@{[0]}) { "$_" }           # check warning isn't duplicated
513 no warnings 'void' ;
514 for (@{[0]}) { "$_" }           # check warning isn't duplicated
515 EXPECT
516 Useless use of string in void context at - line 3.
517 ########
518 # op.c
519 use warnings 'void' ;
520 use Config ;
521 BEGIN {
522     if ( ! $Config{d_telldir}) {
523         print <<EOM ;
524 SKIPPED
525 # telldir not present
526 EOM
527         exit 
528     }
529 }
530 telldir 1 ;             # OP_TELLDIR
531 no warnings 'void' ;
532 telldir 1 ;             # OP_TELLDIR
533 EXPECT
534 Useless use of telldir in void context at - line 13.
535 ########
536 # op.c
537 use warnings 'void' ;
538 use Config ;
539 BEGIN {
540     if ( ! $Config{d_getppid}) {
541         print <<EOM ;
542 SKIPPED
543 # getppid not present
544 EOM
545         exit 
546     }
547 }
548 getppid ;               # OP_GETPPID
549 no warnings 'void' ;
550 getppid ;               # OP_GETPPID
551 EXPECT
552 Useless use of getppid in void context at - line 13.
553 ########
554 # op.c
555 use warnings 'void' ;
556 use Config ;
557 BEGIN {
558     if ( ! $Config{d_getpgrp}) {
559         print <<EOM ;
560 SKIPPED
561 # getpgrp not present
562 EOM
563         exit 
564     }
565 }
566 getpgrp ;               # OP_GETPGRP
567 no warnings 'void' ;
568 getpgrp ;               # OP_GETPGRP
569 EXPECT
570 Useless use of getpgrp in void context at - line 13.
571 ########
572 # op.c
573 use warnings 'void' ;
574 use Config ;
575 BEGIN {
576     if ( ! $Config{d_times}) {
577         print <<EOM ;
578 SKIPPED
579 # times not present
580 EOM
581         exit 
582     }
583 }
584 times ;                 # OP_TMS
585 no warnings 'void' ;
586 times ;                 # OP_TMS
587 EXPECT
588 Useless use of times in void context at - line 13.
589 ########
590 # op.c
591 use warnings 'void' ;
592 use Config ;
593 BEGIN {
594     if ( ! $Config{d_getprior} or $^O eq 'os2') { # Locks before fixpak22
595         print <<EOM ;
596 SKIPPED
597 # getpriority not present
598 EOM
599         exit 
600     }
601 }
602 getpriority 1,2;        # OP_GETPRIORITY
603 no warnings 'void' ;
604 getpriority 1,2;        # OP_GETPRIORITY
605 EXPECT
606 Useless use of getpriority in void context at - line 13.
607 ########
608 # op.c
609 use warnings 'void' ;
610 use Config ;
611 BEGIN {
612     if ( ! $Config{d_getlogin}) {
613         print <<EOM ;
614 SKIPPED
615 # getlogin not present
616 EOM
617         exit 
618     }
619 }
620 getlogin ;                      # OP_GETLOGIN
621 no warnings 'void' ;
622 getlogin ;                      # OP_GETLOGIN
623 EXPECT
624 Useless use of getlogin in void context at - line 13.
625 ########
626 # op.c
627 use warnings 'void' ;
628 use Config ; BEGIN {
629 if ( ! $Config{d_socket}) {
630     print <<EOM ;
631 SKIPPED
632 # getsockname not present
633 # getpeername not present
634 # gethostbyname not present
635 # gethostbyaddr not present
636 # gethostent not present
637 # getnetbyname not present
638 # getnetbyaddr not present
639 # getnetent not present
640 # getprotobyname not present
641 # getprotobynumber not present
642 # getprotoent not present
643 # getservbyname not present
644 # getservbyport not present
645 # getservent not present
646 EOM
647     exit 
648 } }
649 getsockname STDIN ;     # OP_GETSOCKNAME
650 getpeername STDIN ;     # OP_GETPEERNAME
651 gethostbyname 1 ;       # OP_GHBYNAME
652 gethostbyaddr 1,2;      # OP_GHBYADDR
653 gethostent ;            # OP_GHOSTENT
654 getnetbyname 1 ;        # OP_GNBYNAME
655 getnetbyaddr 1,2 ;      # OP_GNBYADDR
656 getnetent ;             # OP_GNETENT
657 getprotobyname 1;       # OP_GPBYNAME
658 getprotobynumber 1;     # OP_GPBYNUMBER
659 getprotoent ;           # OP_GPROTOENT
660 getservbyname 1,2;      # OP_GSBYNAME
661 getservbyport 1,2;      # OP_GSBYPORT
662 getservent ;            # OP_GSERVENT
663
664 no warnings 'void' ;
665 getsockname STDIN ;     # OP_GETSOCKNAME
666 getpeername STDIN ;     # OP_GETPEERNAME
667 gethostbyname 1 ;       # OP_GHBYNAME
668 gethostbyaddr 1,2;      # OP_GHBYADDR
669 gethostent ;            # OP_GHOSTENT
670 getnetbyname 1 ;        # OP_GNBYNAME
671 getnetbyaddr 1,2 ;      # OP_GNBYADDR
672 getnetent ;             # OP_GNETENT
673 getprotobyname 1;       # OP_GPBYNAME
674 getprotobynumber 1;     # OP_GPBYNUMBER
675 getprotoent ;           # OP_GPROTOENT
676 getservbyname 1,2;      # OP_GSBYNAME
677 getservbyport 1,2;      # OP_GSBYPORT
678 getservent ;            # OP_GSERVENT
679 INIT {
680    # some functions may not be there, so we exit without running
681    exit;
682 }
683 EXPECT
684 Useless use of getsockname in void context at - line 24.
685 Useless use of getpeername in void context at - line 25.
686 Useless use of gethostbyname in void context at - line 26.
687 Useless use of gethostbyaddr in void context at - line 27.
688 Useless use of gethostent in void context at - line 28.
689 Useless use of getnetbyname in void context at - line 29.
690 Useless use of getnetbyaddr in void context at - line 30.
691 Useless use of getnetent in void context at - line 31.
692 Useless use of getprotobyname in void context at - line 32.
693 Useless use of getprotobynumber in void context at - line 33.
694 Useless use of getprotoent in void context at - line 34.
695 Useless use of getservbyname in void context at - line 35.
696 Useless use of getservbyport in void context at - line 36.
697 Useless use of getservent in void context at - line 37.
698 ########
699 # op.c
700 use warnings 'void' ;
701 *a ; # OP_RV2GV
702 $a ; # OP_RV2SV
703 @a ; # OP_RV2AV
704 %a ; # OP_RV2HV
705 no warnings 'void' ;
706 *a ; # OP_RV2GV
707 $a ; # OP_RV2SV
708 @a ; # OP_RV2AV
709 %a ; # OP_RV2HV
710 EXPECT
711 Useless use of a variable in void context at - line 3.
712 Useless use of a variable in void context at - line 4.
713 Useless use of a variable in void context at - line 5.
714 Useless use of a variable in void context at - line 6.
715 ########
716 # op.c
717 use warnings 'void' ;
718 "abc"; # OP_CONST
719 7 ; # OP_CONST
720 "x" . "y"; # optimized to OP_CONST
721 2 + 2; # optimized to OP_CONST
722 use constant U => undef;
723 U;
724 qq/"    \n/;
725 5 || print "bad\n";     # test OPpCONST_SHORTCIRCUIT
726 print "boo\n" if U;     # test OPpCONST_SHORTCIRCUIT
727 if($foo){}elsif(""){}   # test OPpCONST_SHORTCIRCUIT
728 no warnings 'void' ;
729 "abc"; # OP_CONST
730 7 ; # OP_CONST
731 "x" . "y"; # optimized to OP_CONST
732 2 + 2; # optimized to OP_CONST
733 EXPECT
734 Useless use of a constant ("abc") in void context at - line 3.
735 Useless use of a constant (7) in void context at - line 4.
736 Useless use of a constant ("xy") in void context at - line 5.
737 Useless use of a constant (4) in void context at - line 6.
738 Useless use of a constant (undef) in void context at - line 8.
739 Useless use of a constant ("\"\t\n") in void context at - line 9.
740 ########
741 # op.c
742 BEGIN {
743     if (ord('A') == 193) {
744         print "SKIPPED\n# Result varies depending on EBCDIC code page";
745         exit 0;
746     }
747 }
748 use utf8;
749 use open qw( :utf8 :std );
750 use warnings 'void' ;
751 "àḆc"; # OP_CONST
752 EXPECT
753 Useless use of a constant ("\340\x{1e06}c") in void context at - line 11.
754 ########
755 # op.c
756 use utf8;
757 use open qw( :utf8 :std );
758 use warnings 'void' ;
759 "Ẋ" . "ƴ"; # optimized to OP_CONST
760 FOO;     # Bareword optimized to OP_CONST
761 use constant ů => undef;
762 ů;
763 5 || print "bad\n";     # test OPpCONST_SHORTCIRCUIT
764 print "boo\n" if ů;    # test OPpCONST_SHORTCIRCUIT
765 no warnings 'void' ;
766 "àḆc"; # OP_CONST
767 "Ẋ" . "ƴ"; # optimized to OP_CONST
768 EXPECT
769 Useless use of a constant ("\x{1e8a}\x{1b4}") in void context at - line 5.
770 Useless use of a constant ("\x{ff26}\x{ff2f}\x{ff2f}") in void context at - line 6.
771 Useless use of a constant (undef) in void context at - line 8.
772 ########
773 # op.c
774 #
775 use warnings 'misc' ; use utf8;
776 my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;my $d = 'test';
777 @a =~ /abc/ ;
778 @a2 =~ s/a/b/ ;
779 @a3 =~ tr/a/b/ ;
780 @$b =~ /abc/ ;
781 @$b =~ s/a/b/ ;
782 @$b =~ tr/a/b/ ;
783 %a =~ /abc/ ;
784 %a2 =~ s/a/b/ ;
785 %a3 =~ tr/a/b/ ;
786 %$c =~ /abc/ ;
787 %$c =~ s/a/b/ ;
788 %$c =~ tr/a/b/ ;
789 $d =~ tr/a/b/d ;
790 $d2 =~ tr/a/bc/;
791 $d3 =~ tr//b/c;
792 $d =~ tr/α/β/d ;
793 $d2 =~ tr/α/βγ/;
794 {
795 no warnings 'misc' ;
796 my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ; my $d = 'test';
797 @a =~ /abc/ ;
798 @a =~ s/a/b/ ;
799 @a =~ tr/a/b/ ;
800 @$b =~ /abc/ ;
801 @$b =~ s/a/b/ ;
802 @$b =~ tr/a/b/ ;
803 %a =~ /abc/ ;
804 %a =~ s/a/b/ ;
805 %a =~ tr/a/b/ ;
806 %$c =~ /abc/ ;
807 %$c =~ s/a/b/ ;
808 %$c =~ tr/a/b/ ;
809 $d =~ tr/a/b/d ;
810 $d =~ tr/a/bc/ ;
811 $d =~ tr//b/c;
812 }
813 EXPECT
814 Applying pattern match (m//) to @a will act on scalar(@a) at - line 5.
815 Applying substitution (s///) to @a2 will act on scalar(@a2) at - line 6.
816 Applying transliteration (tr///) to @a3 will act on scalar(@a3) at - line 7.
817 Applying pattern match (m//) to @array will act on scalar(@array) at - line 8.
818 Applying substitution (s///) to @array will act on scalar(@array) at - line 9.
819 Applying transliteration (tr///) to @array will act on scalar(@array) at - line 10.
820 Applying pattern match (m//) to %a will act on scalar(%a) at - line 11.
821 Applying substitution (s///) to %a2 will act on scalar(%a2) at - line 12.
822 Applying transliteration (tr///) to %a3 will act on scalar(%a3) at - line 13.
823 Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 14.
824 Applying substitution (s///) to %hash will act on scalar(%hash) at - line 15.
825 Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 16.
826 Useless use of /d modifier in transliteration operator at - line 17.
827 Replacement list is longer than search list at - line 18.
828 Useless use of /d modifier in transliteration operator at - line 20.
829 Replacement list is longer than search list at - line 21.
830 Can't modify array dereference in substitution (s///) at - line 6, near "s/a/b/ ;"
831 BEGIN not safe after errors--compilation aborted at - line 23.
832 ########
833 # op.c
834 use warnings 'parenthesis' ;
835 my $a, $b = (1,2);
836 my @foo,%bar,   $quux; # there's a TAB here
837 my $x, $y or print;
838 my $p, *q;
839 no warnings 'parenthesis' ;
840 my $c, $d = (1,2);
841 EXPECT
842 Parentheses missing around "my" list at - line 3.
843 Parentheses missing around "my" list at - line 4.
844 ########
845 # op.c
846 use warnings 'parenthesis' ;
847 our $a, $b = (1,2);
848 our $p, *q;
849 no warnings 'parenthesis' ;
850 our $c, $d = (1,2);
851 EXPECT
852 Parentheses missing around "our" list at - line 3.
853 ########
854 # op.c
855 use warnings 'parenthesis' ;
856 local $a, $b = (1,2);
857 local *f, *g;
858 local $p, *q;
859 no warnings 'parenthesis' ;
860 local $c, $d = (1,2);
861 EXPECT
862 Parentheses missing around "local" list at - line 3.
863 Parentheses missing around "local" list at - line 4.
864 Parentheses missing around "local" list at - line 5.
865 ########
866 # op.c
867 use warnings 'bareword' ;
868 print (ABC || 1) ;
869 no warnings 'bareword' ;
870 print (ABC || 1) ;
871 EXPECT
872 Bareword found in conditional at - line 3.
873 ########
874 --FILE-- abc
875
876 --FILE--
877 # op.c
878 use warnings 'misc' ;
879 open FH, "<abc" ;
880 $x = 1 if $x = <FH> ;
881 $x = 1 if $x
882      = <FH> ;
883 no warnings 'misc' ;
884 $x = 1 if $x = <FH> ;
885 $x = 1 if $x
886      = <FH> ;
887 EXPECT
888 Value of <HANDLE> construct can be "0"; test with defined() at - line 4.
889 Value of <HANDLE> construct can be "0"; test with defined() at - line 5.
890 ########
891 # op.c
892 use warnings 'misc' ;
893 opendir FH, "." ;
894 $x = 1 if $x = readdir FH ;
895 $x = 1 if $x
896     = readdir FH ;
897 no warnings 'misc' ;
898 $x = 1 if $x = readdir FH ;
899 $x = 1 if $x
900     = readdir FH ;
901 closedir FH ;
902 EXPECT
903 Value of readdir() operator can be "0"; test with defined() at - line 4.
904 Value of readdir() operator can be "0"; test with defined() at - line 5.
905 ########
906 # op.c
907 use warnings 'misc' ;
908 $x = 1 if $x = <*> ;
909 $x = 1 if $x
910     = <*> ;
911 no warnings 'misc' ;
912 $x = 1 if $x = <*> ;
913 $x = 1 if $x
914     = <*> ;
915 EXPECT
916 Value of glob construct can be "0"; test with defined() at - line 3.
917 Value of glob construct can be "0"; test with defined() at - line 4.
918 ########
919 # op.c
920 use warnings 'misc' ;
921 %a = (1,2,3,4) ;
922 $x = 1 if $x = each %a ;
923 no warnings 'misc' ;
924 $x = 1 if $x = each %a ;
925 EXPECT
926 Value of each() operator can be "0"; test with defined() at - line 4.
927 ########
928 # op.c
929 use warnings 'misc' ;
930 $x = 1 while $x = <*> and 0 ;
931 no warnings 'misc' ;
932 $x = 1 while $x = <*> and 0 ;
933 EXPECT
934 Value of glob construct can be "0"; test with defined() at - line 3.
935 ########
936 # op.c
937 use warnings 'misc' ;
938 opendir FH, "." ;
939 $x = 1 while $x = readdir FH and 0 ;
940 no warnings 'misc' ;
941 $x = 1 while $x = readdir FH and 0 ;
942 closedir FH ;
943 EXPECT
944 Value of readdir() operator can be "0"; test with defined() at - line 4.
945 ########
946 # op.c
947 use warnings 'misc';
948 open FH, "<abc";
949 ($_ = <FH>) // ($_ = 1);
950 opendir DH, ".";
951 %a = (1,2,3,4) ;
952 EXPECT
953 ########
954 # op.c
955 use warnings 'redefine' ;
956 sub fred {}
957 sub fred {}
958 sub fred { # warning should be for this line
959 }
960 no warnings 'redefine' ;
961 sub fred {}
962 sub fred {
963 }
964 EXPECT
965 Subroutine fred redefined at - line 4.
966 Subroutine fred redefined at - line 5.
967 ########
968 # op.c
969 use warnings 'redefine' ;
970 sub fred () { 1 }
971 sub fred () { 1 }
972 no warnings 'redefine' ;
973 sub fred () { 1 }
974 EXPECT
975 Constant subroutine fred redefined at - line 4.
976 ########
977 # op.c
978 sub fred () { 1 }
979 sub fred () { 2 }
980 EXPECT
981 Constant subroutine fred redefined at - line 3.
982 ########
983 # op.c
984 sub fred () { 1 }
985 *fred = sub () { 2 };
986 EXPECT
987 Constant subroutine main::fred redefined at - line 3.
988 ########
989 # op.c
990 use feature "lexical_subs", "state";
991 my sub fred () { 1 }
992 sub fred { 2 };
993 my sub george { 1 }
994 sub george () { 2 } # should *not* produce redef warnings by default
995 state sub phred () { 1 }
996 sub phred { 2 };
997 state sub jorge { 1 }
998 sub jorge () { 2 } # should *not* produce redef warnings by default
999 EXPECT
1000 The lexical_subs feature is experimental at - line 3.
1001 Prototype mismatch: sub fred () vs none at - line 4.
1002 Constant subroutine fred redefined at - line 4.
1003 The lexical_subs feature is experimental at - line 5.
1004 Prototype mismatch: sub george: none vs () at - line 6.
1005 The lexical_subs feature is experimental at - line 7.
1006 Prototype mismatch: sub phred () vs none at - line 8.
1007 Constant subroutine phred redefined at - line 8.
1008 The lexical_subs feature is experimental at - line 9.
1009 Prototype mismatch: sub jorge: none vs () at - line 10.
1010 ########
1011 # op.c
1012 no warnings 'redefine' ;
1013 sub fred () { 1 }
1014 sub fred () { 2 }
1015 EXPECT
1016 ########
1017 # op.c
1018 no warnings 'redefine' ;
1019 sub fred () { 1 }
1020 *fred = sub () { 2 };
1021 EXPECT
1022 ########
1023 # op.c
1024 use warnings 'redefine' ;
1025 format FRED =
1026 .
1027 format FRED =
1028 .
1029 no warnings 'redefine' ;
1030 format FRED =
1031 .
1032 EXPECT
1033 Format FRED redefined at - line 5.
1034 ########
1035 # op.c
1036 use warnings 'exec' ;
1037 exec "$^X -e 1" ; 
1038 my $a
1039 EXPECT
1040 Statement unlikely to be reached at - line 4.
1041         (Maybe you meant system() when you said exec()?)
1042 ########
1043 # op.c, no warning if exec isn't a statement.
1044 use warnings 'exec' ;
1045 $a || exec "$^X -e 1" ;
1046 my $a
1047 EXPECT
1048 ########
1049 # op.c
1050 defined(@a);
1051 EXPECT
1052 OPTION fatal
1053 Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at - line 2.
1054 ########
1055 # op.c
1056 my @a; defined(@a);
1057 EXPECT
1058 OPTION fatal
1059 Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at - line 2.
1060 ########
1061 # op.c
1062 defined(@a = (1,2,3));
1063 EXPECT
1064 ########
1065 # op.c
1066 defined(%h);
1067 EXPECT
1068 OPTION fatal
1069 Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at - line 2.
1070 ########
1071 # op.c
1072 my %h; defined(%h);
1073 EXPECT
1074 OPTION fatal
1075 Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at - line 2.
1076 ########
1077 # op.c
1078 no warnings 'exec' ;
1079 exec "$^X -e 1" ; 
1080 my $a
1081 EXPECT
1082
1083 ########
1084 # op.c
1085 sub fred();
1086 sub fred($) {}
1087 use constant foo=>bar; sub foo(@);
1088 use constant bav=>bar; sub bav(); # no warning
1089 sub btu; sub btu();
1090 EXPECT
1091 Prototype mismatch: sub main::fred () vs ($) at - line 3.
1092 Prototype mismatch: sub foo () vs (@) at - line 4.
1093 Prototype mismatch: sub btu: none vs () at - line 6.
1094 ########
1095 # op.c
1096 use utf8;
1097 use open qw( :utf8 :std );
1098 sub frèd();
1099 sub frèd($) {}
1100 EXPECT
1101 Prototype mismatch: sub main::frèd () vs ($) at - line 5.
1102 ########
1103 # op.c
1104 use utf8;
1105 use open qw( :utf8 :std );
1106 use warnings;
1107 eval "sub fòò (@\$\0) {}";
1108 EXPECT
1109 Prototype after '@' for main::fòò : @$\0 at (eval 1) line 1.
1110 Illegal character in prototype for main::fòò : @$\0 at (eval 1) line 1.
1111 ########
1112 # op.c
1113 use utf8;
1114 use open qw( :utf8 :std );
1115 use warnings;
1116 eval "sub foo (@\0) {}";
1117 EXPECT
1118 Prototype after '@' for main::foo : @\0 at (eval 1) line 1.
1119 Illegal character in prototype for main::foo : @\0 at (eval 1) line 1.
1120 ########
1121 # op.c
1122 BEGIN {
1123     if (ord('A') == 193) {
1124         print "SKIPPED\n# Different results on EBCDIC";
1125         exit 0;
1126     }
1127 }
1128 use utf8;
1129 use open qw( :utf8 :std );
1130 use warnings;
1131 BEGIN { $::{"foo"} = "\@\$\0L\351on" }
1132 BEGIN { eval "sub foo (@\$\0L\x{c3}\x{a9}on) {}"; }
1133 EXPECT
1134 Prototype after '@' for main::foo : @$\x{0}L... at (eval 1) line 1.
1135 Illegal character in prototype for main::foo : @$\x{0}L... at (eval 1) line 1.
1136 ########
1137 # op.c
1138 use utf8;
1139 use open qw( :utf8 :std );
1140 use warnings;
1141 BEGIN { eval "sub foo (@\0) {}"; }
1142 EXPECT
1143 Prototype after '@' for main::foo : @\0 at (eval 1) line 1.
1144 Illegal character in prototype for main::foo : @\0 at (eval 1) line 1.
1145 ########
1146 # op.c
1147 use warnings;
1148 eval "sub foo (@\xAB) {}";
1149 EXPECT
1150 Prototype after '@' for main::foo : @\x{ab} at (eval 1) line 1.
1151 Illegal character in prototype for main::foo : @\x{ab} at (eval 1) line 1.
1152 ########
1153 # op.c
1154 use utf8;
1155 use open qw( :utf8 :std );
1156 use warnings;
1157 BEGIN { eval "sub foo (@\x{30cb}) {}"; }
1158 EXPECT
1159 Prototype after '@' for main::foo : @\x{30cb} at (eval 1) line 1.
1160 Illegal character in prototype for main::foo : @\x{30cb} at (eval 1) line 1.
1161 ########
1162 # op.c
1163 use utf8;
1164 use open qw( :utf8 :std );
1165 use warnings;
1166 BEGIN { $::{"foo"} = "\x{30cb}" }
1167 BEGIN { eval "sub foo {}"; }
1168 EXPECT
1169 Prototype mismatch: sub main::foo (ニ) vs none at (eval 1) line 1.
1170 ########
1171 # op.c
1172 $^W = 0 ;
1173 sub fred() ;
1174 sub fred($) {}
1175 {
1176     no warnings 'prototype' ;
1177     sub Fred() ;
1178     sub Fred($) {}
1179     use warnings 'prototype' ;
1180     sub freD() ;
1181     sub freD($) {}
1182 }
1183 sub FRED() ;
1184 sub FRED($) {}
1185 EXPECT
1186 Prototype mismatch: sub main::fred () vs ($) at - line 4.
1187 Prototype mismatch: sub main::freD () vs ($) at - line 11.
1188 Prototype mismatch: sub main::FRED () vs ($) at - line 14.
1189 ########
1190 # op.c [S_simplify_sort]
1191 # [perl #86136]
1192 my @tests = split /^/, '
1193   sort {$a <=> $b} @a;
1194   sort {$a cmp $b} @a;
1195   { use integer; sort {$a <=> $b} @a}
1196   sort {$b <=> $a} @a;
1197   sort {$b cmp $a} @a;
1198   { use integer; sort {$b <=> $a} @a}
1199 ';
1200 for my $pragma ('use warnings "syntax";', '') {
1201   for my $vars ('', 'my $a;', 'my $b;', 'my ($a,$b);') {
1202     for my $inner_stmt ('', 'print;', 'func();') {
1203       eval "#line " . ++$line . "01 -\n$pragma\n$vars"
1204           . join "", map s/sort \{\K/$inner_stmt/r, @tests;
1205       $@ and die;
1206     }
1207   }
1208 }
1209 sub func{}
1210 use warnings 'syntax';
1211 my $a;
1212 # These used to be errors!
1213 sort { ; } $a <=> $b;
1214 sort { ; } $a, "<=>";
1215 sort { ; } $a, $cmp;
1216 sort $a, $b if $cmpany_name;
1217 sort if $a + $cmp;
1218 sort @t; $a + $cmp;
1219 EXPECT
1220 "my $a" used in sort comparison at - line 403.
1221 "my $a" used in sort comparison at - line 404.
1222 "my $a" used in sort comparison at - line 405.
1223 "my $a" used in sort comparison at - line 406.
1224 "my $a" used in sort comparison at - line 407.
1225 "my $a" used in sort comparison at - line 408.
1226 "my $a" used in sort comparison at - line 503.
1227 "my $a" used in sort comparison at - line 504.
1228 "my $a" used in sort comparison at - line 505.
1229 "my $a" used in sort comparison at - line 506.
1230 "my $a" used in sort comparison at - line 507.
1231 "my $a" used in sort comparison at - line 508.
1232 "my $a" used in sort comparison at - line 603.
1233 "my $a" used in sort comparison at - line 604.
1234 "my $a" used in sort comparison at - line 605.
1235 "my $a" used in sort comparison at - line 606.
1236 "my $a" used in sort comparison at - line 607.
1237 "my $a" used in sort comparison at - line 608.
1238 "my $b" used in sort comparison at - line 703.
1239 "my $b" used in sort comparison at - line 704.
1240 "my $b" used in sort comparison at - line 705.
1241 "my $b" used in sort comparison at - line 706.
1242 "my $b" used in sort comparison at - line 707.
1243 "my $b" used in sort comparison at - line 708.
1244 "my $b" used in sort comparison at - line 803.
1245 "my $b" used in sort comparison at - line 804.
1246 "my $b" used in sort comparison at - line 805.
1247 "my $b" used in sort comparison at - line 806.
1248 "my $b" used in sort comparison at - line 807.
1249 "my $b" used in sort comparison at - line 808.
1250 "my $b" used in sort comparison at - line 903.
1251 "my $b" used in sort comparison at - line 904.
1252 "my $b" used in sort comparison at - line 905.
1253 "my $b" used in sort comparison at - line 906.
1254 "my $b" used in sort comparison at - line 907.
1255 "my $b" used in sort comparison at - line 908.
1256 "my $a" used in sort comparison at - line 1003.
1257 "my $b" used in sort comparison at - line 1003.
1258 "my $a" used in sort comparison at - line 1004.
1259 "my $b" used in sort comparison at - line 1004.
1260 "my $a" used in sort comparison at - line 1005.
1261 "my $b" used in sort comparison at - line 1005.
1262 "my $b" used in sort comparison at - line 1006.
1263 "my $a" used in sort comparison at - line 1006.
1264 "my $b" used in sort comparison at - line 1007.
1265 "my $a" used in sort comparison at - line 1007.
1266 "my $b" used in sort comparison at - line 1008.
1267 "my $a" used in sort comparison at - line 1008.
1268 "my $a" used in sort comparison at - line 1103.
1269 "my $b" used in sort comparison at - line 1103.
1270 "my $a" used in sort comparison at - line 1104.
1271 "my $b" used in sort comparison at - line 1104.
1272 "my $a" used in sort comparison at - line 1105.
1273 "my $b" used in sort comparison at - line 1105.
1274 "my $b" used in sort comparison at - line 1106.
1275 "my $a" used in sort comparison at - line 1106.
1276 "my $b" used in sort comparison at - line 1107.
1277 "my $a" used in sort comparison at - line 1107.
1278 "my $b" used in sort comparison at - line 1108.
1279 "my $a" used in sort comparison at - line 1108.
1280 "my $a" used in sort comparison at - line 1203.
1281 "my $b" used in sort comparison at - line 1203.
1282 "my $a" used in sort comparison at - line 1204.
1283 "my $b" used in sort comparison at - line 1204.
1284 "my $a" used in sort comparison at - line 1205.
1285 "my $b" used in sort comparison at - line 1205.
1286 "my $b" used in sort comparison at - line 1206.
1287 "my $a" used in sort comparison at - line 1206.
1288 "my $b" used in sort comparison at - line 1207.
1289 "my $a" used in sort comparison at - line 1207.
1290 "my $b" used in sort comparison at - line 1208.
1291 "my $a" used in sort comparison at - line 1208.
1292 ########
1293 # op.c [S_simplify_sort]
1294 use warnings 'syntax'; use 5.01;
1295 state $a;
1296 sort { $a <=> $b } ();
1297 EXPECT
1298 "state $a" used in sort comparison at - line 4.
1299 ########
1300 # op.c [Perl_ck_cmp]
1301 use warnings 'syntax' ;
1302 no warnings 'deprecated';
1303 @a = $[ < 5;
1304 @a = $[ > 5;
1305 @a = $[ <= 5;
1306 @a = $[ >= 5;
1307 @a = 42 < $[;
1308 @a = 42 > $[;
1309 @a = 42 <= $[;
1310 @a = 42 >= $[;
1311 use integer;
1312 @a = $[ < 5;
1313 @a = $[ > 5;
1314 @a = $[ <= 5;
1315 @a = $[ >= 5;
1316 @a = 42 < $[;
1317 @a = 42 > $[;
1318 @a = 42 <= $[;
1319 @a = 42 >= $[;
1320 no integer;
1321 @a = $[ < $5;
1322 @a = $[ > $5;
1323 @a = $[ <= $5;
1324 @a = $[ >= $5;
1325 @a = $42 < $[;
1326 @a = $42 > $[;
1327 @a = $42 <= $[;
1328 @a = $42 >= $[;
1329 use integer;
1330 @a = $[ < $5;
1331 @a = $[ > $5;
1332 @a = $[ <= $5;
1333 @a = $[ >= $5;
1334 @a = $42 < $[;
1335 @a = $42 > $[;
1336 @a = $42 <= $[;
1337 @a = $42 >= $[;
1338 EXPECT
1339 $[ used in numeric lt (<) (did you mean $] ?) at - line 4.
1340 $[ used in numeric gt (>) (did you mean $] ?) at - line 5.
1341 $[ used in numeric le (<=) (did you mean $] ?) at - line 6.
1342 $[ used in numeric ge (>=) (did you mean $] ?) at - line 7.
1343 $[ used in numeric lt (<) (did you mean $] ?) at - line 8.
1344 $[ used in numeric gt (>) (did you mean $] ?) at - line 9.
1345 $[ used in numeric le (<=) (did you mean $] ?) at - line 10.
1346 $[ used in numeric ge (>=) (did you mean $] ?) at - line 11.
1347 $[ used in numeric lt (<) (did you mean $] ?) at - line 13.
1348 $[ used in numeric gt (>) (did you mean $] ?) at - line 14.
1349 $[ used in numeric le (<=) (did you mean $] ?) at - line 15.
1350 $[ used in numeric ge (>=) (did you mean $] ?) at - line 16.
1351 $[ used in numeric lt (<) (did you mean $] ?) at - line 17.
1352 $[ used in numeric gt (>) (did you mean $] ?) at - line 18.
1353 $[ used in numeric le (<=) (did you mean $] ?) at - line 19.
1354 $[ used in numeric ge (>=) (did you mean $] ?) at - line 20.
1355 ########
1356 # op.c [Perl_ck_length]
1357 use warnings 'syntax' ;
1358 length(@a);
1359 length(%b);
1360 length(@$c);
1361 length(%$d);
1362 length($a);
1363 length(my %h);
1364 length(my @g);
1365 EXPECT
1366 length() used on @a (did you mean "scalar(@a)"?) at - line 3.
1367 length() used on %b (did you mean "scalar(keys %b)"?) at - line 4.
1368 length() used on @array (did you mean "scalar(@array)"?) at - line 5.
1369 length() used on %hash (did you mean "scalar(keys %hash)"?) at - line 6.
1370 length() used on %h (did you mean "scalar(keys %h)"?) at - line 8.
1371 length() used on @g (did you mean "scalar(@g)"?) at - line 9.
1372 ########
1373 # op.c
1374 use warnings 'syntax' ;
1375 join /---/, 'x', 'y', 'z';
1376 EXPECT
1377 /---/ should probably be written as "---" at - line 3.
1378 ########
1379 # op.c
1380 use utf8;
1381 use open qw( :utf8 :std );
1382 use warnings 'syntax' ;
1383 join /~~~/, 'x', 'y', 'z';
1384 EXPECT
1385 /~~~/ should probably be written as "~~~" at - line 5.
1386 ########
1387 # op.c [Perl_peep]
1388 use warnings 'prototype' ;
1389 fred() ; 
1390 sub fred ($$) {}
1391 no warnings 'prototype' ;
1392 joe() ; 
1393 sub joe ($$) {}
1394 EXPECT
1395 main::fred() called too early to check prototype at - line 3.
1396 ########
1397 # op.c [Perl_newATTRSUB]
1398 --FILE-- abc.pm
1399 use warnings 'void' ;
1400 BEGIN { $| = 1; print "in begin\n"; }
1401 CHECK { print "in check\n"; }
1402 INIT { print "in init\n"; }
1403 END { print "in end\n"; }
1404 print "in mainline\n";
1405 1;
1406 --FILE--
1407 use abc;
1408 delete $INC{"abc.pm"};
1409 require abc;
1410 do "abc.pm";
1411 EXPECT
1412 in begin
1413 in mainline
1414 in check
1415 in init
1416 in begin
1417 Too late to run CHECK block at abc.pm line 3.
1418 Too late to run INIT block at abc.pm line 4.
1419 in mainline
1420 in begin
1421 Too late to run CHECK block at abc.pm line 3.
1422 Too late to run INIT block at abc.pm line 4.
1423 in mainline
1424 in end
1425 in end
1426 in end
1427 ########
1428 # op.c [Perl_newATTRSUB]
1429 --FILE-- abc.pm
1430 no warnings 'void' ;
1431 BEGIN { $| = 1; print "in begin\n"; }
1432 CHECK { print "in check\n"; }
1433 INIT { print "in init\n"; }
1434 END { print "in end\n"; }
1435 print "in mainline\n";
1436 1;
1437 --FILE--
1438 require abc;
1439 do "abc.pm";
1440 EXPECT
1441 in begin
1442 in mainline
1443 in begin
1444 in mainline
1445 in end
1446 in end
1447 ########
1448 # op.c
1449 my @x;
1450 use warnings 'syntax' ;
1451 push(@x);
1452 unshift(@x);
1453 no warnings 'syntax' ;
1454 push(@x);
1455 unshift(@x);
1456 EXPECT
1457 Useless use of push with no values at - line 4.
1458 Useless use of unshift with no values at - line 5.
1459 ########
1460 # op.c
1461 # 20020401 mjd@plover.com at suggestion of jfriedl@yahoo.com
1462 use warnings 'regexp';
1463 split /blah/g, "blah";
1464 no warnings 'regexp';
1465 split /blah/g, "blah";
1466 EXPECT
1467 Use of /g modifier is meaningless in split at - line 4.
1468 ########
1469 use feature "bitwise";
1470 $_ = $_ | $_;
1471 $_ = $_ & $_;
1472 $_ = $_ ^ $_;
1473 $_ = ~$_;
1474 $_ = $_ |. $_;
1475 $_ = $_ &. $_;
1476 $_ = $_ ^. $_;
1477 $_ = ~.$_;
1478 $_ |= $_;
1479 $_ &= $_;
1480 $_ ^= $_;
1481 $_ |.= $_;
1482 $_ &.= $_;
1483 $_ ^.= $_;
1484 use warnings "experimental::bitwise";
1485 $_ = $_ | $_;
1486 $_ = $_ & $_;
1487 $_ = $_ ^ $_;
1488 $_ = ~$_;
1489 $_ = $_ |. $_;
1490 $_ = $_ &. $_;
1491 $_ = $_ ^. $_;
1492 $_ = ~.$_;
1493 $_ |= $_;
1494 $_ &= $_;
1495 $_ ^= $_;
1496 $_ |.= $_;
1497 $_ &.= $_;
1498 $_ ^.= $_;
1499 no warnings "experimental::bitwise";
1500 $_ = $_ | $_;
1501 $_ = $_ & $_;
1502 $_ = $_ ^ $_;
1503 $_ = ~$_;
1504 $_ = $_ |. $_;
1505 $_ = $_ &. $_;
1506 $_ = $_ ^. $_;
1507 $_ = ~.$_;
1508 $_ |= $_;
1509 $_ &= $_;
1510 $_ ^= $_;
1511 $_ |.= $_;
1512 $_ &.= $_;
1513 $_ ^.= $_;
1514 EXPECT
1515 The bitwise feature is experimental at - line 2.
1516 The bitwise feature is experimental at - line 3.
1517 The bitwise feature is experimental at - line 4.
1518 The bitwise feature is experimental at - line 5.
1519 The bitwise feature is experimental at - line 6.
1520 The bitwise feature is experimental at - line 7.
1521 The bitwise feature is experimental at - line 8.
1522 The bitwise feature is experimental at - line 9.
1523 The bitwise feature is experimental at - line 10.
1524 The bitwise feature is experimental at - line 11.
1525 The bitwise feature is experimental at - line 12.
1526 The bitwise feature is experimental at - line 13.
1527 The bitwise feature is experimental at - line 14.
1528 The bitwise feature is experimental at - line 15.
1529 The bitwise feature is experimental at - line 17.
1530 The bitwise feature is experimental at - line 18.
1531 The bitwise feature is experimental at - line 19.
1532 The bitwise feature is experimental at - line 20.
1533 The bitwise feature is experimental at - line 21.
1534 The bitwise feature is experimental at - line 22.
1535 The bitwise feature is experimental at - line 23.
1536 The bitwise feature is experimental at - line 24.
1537 The bitwise feature is experimental at - line 25.
1538 The bitwise feature is experimental at - line 26.
1539 The bitwise feature is experimental at - line 27.
1540 The bitwise feature is experimental at - line 28.
1541 The bitwise feature is experimental at - line 29.
1542 The bitwise feature is experimental at - line 30.
1543 ########
1544 # op.c
1545 use warnings 'precedence';
1546 $a = $b & $c == $d;
1547 $a = $b ^ $c != $d;
1548 $a = $b | $c > $d;
1549 $a = $b < $c & $d;
1550 $a = $b >= $c ^ $d;
1551 $a = $b <= $c | $d;
1552 $a = $b <=> $c & $d;
1553 $a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn
1554 {
1555  use experimental 'bitwise';
1556  $a = $b & $c == $d;
1557  $a = $b ^ $c != $d;
1558  $a = $b | $c > $d;
1559  $a = $b < $c & $d;
1560  $a = $b >= $c ^ $d;
1561  $a = $b <= $c | $d;
1562  $a = $b <=> $c & $d;
1563  $a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn
1564  $a = $b &. $c == $d;
1565  $a = $b ^. $c != $d;
1566  $a = $b |. $c > $d;
1567  $a = $b < $c &. $d;
1568  $a = $b >= $c ^. $d;
1569  $a = $b <= $c |. $d;
1570  $a = $b <=> $c &. $d;
1571  $a &.= $b == $c; $a |.= $b == $c; $a ^.= $b == $c; # shouldn't warn
1572 }
1573 no warnings 'precedence';
1574 $a = $b & $c == $d;
1575 $a = $b ^ $c != $d;
1576 $a = $b | $c > $d;
1577 $a = $b < $c & $d;
1578 $a = $b >= $c ^ $d;
1579 $a = $b <= $c | $d;
1580 $a = $b <=> $c & $d;
1581 {
1582  use experimental 'bitwise';
1583  $a = $b & $c == $d;
1584  $a = $b ^ $c != $d;
1585  $a = $b | $c > $d;
1586  $a = $b < $c & $d;
1587  $a = $b >= $c ^ $d;
1588  $a = $b <= $c | $d;
1589  $a = $b <=> $c & $d;
1590  $a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn
1591  $a = $b &. $c == $d;
1592  $a = $b ^. $c != $d;
1593  $a = $b |. $c > $d;
1594  $a = $b < $c &. $d;
1595  $a = $b >= $c ^. $d;
1596  $a = $b <= $c |. $d;
1597  $a = $b <=> $c &. $d;
1598  $a &.= $b == $c; $a |.= $b == $c; $a ^.= $b == $c; # shouldn't warn
1599 }
1600 EXPECT
1601 Possible precedence problem on bitwise & operator at - line 3.
1602 Possible precedence problem on bitwise ^ operator at - line 4.
1603 Possible precedence problem on bitwise | operator at - line 5.
1604 Possible precedence problem on bitwise & operator at - line 6.
1605 Possible precedence problem on bitwise ^ operator at - line 7.
1606 Possible precedence problem on bitwise | operator at - line 8.
1607 Possible precedence problem on bitwise & operator at - line 9.
1608 Possible precedence problem on bitwise & operator at - line 13.
1609 Possible precedence problem on bitwise ^ operator at - line 14.
1610 Possible precedence problem on bitwise | operator at - line 15.
1611 Possible precedence problem on bitwise & operator at - line 16.
1612 Possible precedence problem on bitwise ^ operator at - line 17.
1613 Possible precedence problem on bitwise | operator at - line 18.
1614 Possible precedence problem on bitwise & operator at - line 19.
1615 Possible precedence problem on bitwise &. operator at - line 21.
1616 Possible precedence problem on bitwise ^. operator at - line 22.
1617 Possible precedence problem on bitwise |. operator at - line 23.
1618 Possible precedence problem on bitwise &. operator at - line 24.
1619 Possible precedence problem on bitwise ^. operator at - line 25.
1620 Possible precedence problem on bitwise |. operator at - line 26.
1621 Possible precedence problem on bitwise &. operator at - line 27.
1622 ########
1623 # op.c
1624 use integer;
1625 use warnings 'precedence';
1626 $a = $b & $c == $d;
1627 $a = $b ^ $c != $d;
1628 $a = $b | $c > $d;
1629 $a = $b < $c & $d;
1630 $a = $b >= $c ^ $d;
1631 $a = $b <= $c | $d;
1632 $a = $b <=> $c & $d;
1633 no warnings 'precedence';
1634 $a = $b & $c == $d;
1635 $a = $b ^ $c != $d;
1636 $a = $b | $c > $d;
1637 $a = $b < $c & $d;
1638 $a = $b >= $c ^ $d;
1639 $a = $b <= $c | $d;
1640 $a = $b <=> $c & $d;
1641 EXPECT
1642 Possible precedence problem on bitwise & operator at - line 4.
1643 Possible precedence problem on bitwise ^ operator at - line 5.
1644 Possible precedence problem on bitwise | operator at - line 6.
1645 Possible precedence problem on bitwise & operator at - line 7.
1646 Possible precedence problem on bitwise ^ operator at - line 8.
1647 Possible precedence problem on bitwise | operator at - line 9.
1648 Possible precedence problem on bitwise & operator at - line 10.
1649 ########
1650 # op.c
1651
1652 # ok    => local() has desired effect;
1653 # ignore=> local() silently ignored
1654
1655 use warnings 'syntax';
1656
1657 local(undef);           # OP_UNDEF              ignore
1658 sub lval : lvalue {};
1659 local(lval());          # OP_ENTERSUB
1660 local($x **= 1);        # OP_POW
1661 local($x *=  1);        # OP_MULTIPLY
1662 local($x /=  1);        # OP_DIVIDE
1663 local($x %=  1);        # OP_MODULO
1664 local($x x=  1);        # OP_REPEAT
1665 local($x +=  1);        # OP_ADD
1666 local($x -=  1);        # OP_SUBTRACT
1667 local($x .=  1);        # OP_CONCAT
1668 local($x <<= 1);        # OP_LEFT_SHIFT
1669 local($x >>= 1);        # OP_RIGHT_SHIFT
1670 local($x &=  1);        # OP_BIT_AND
1671 local($x ^=  1);        # OP_BIT_XOR
1672 local($x |=  1);        # OP_BIT_OR
1673 {
1674     use integer;
1675     local($x *= 1);     # OP_I_MULTIPLY
1676     local($x /= 1);     # OP_I_DIVIDE
1677     local($x %= 1);     # OP_I_MODULO
1678     local($x += 1);     # OP_I_ADD
1679     local($x -= 1);     # OP_I_SUBTRACT
1680 }
1681 local($x?$y:$z) = 1;    # OP_COND_EXPR          ok
1682 # these two are fatal run-time errors instead
1683 #local(@$a);            # OP_RV2AV              ok
1684 #local(%$a);            # OP_RV2HV              ok
1685 local(*a);              # OP_RV2GV              ok
1686 local(@a[1,2]);         # OP_ASLICE             ok
1687 local(@a{1,2});         # OP_HSLICE             ok
1688 local(@a = (1,2));      # OP_AASSIGN
1689 local($$x);             # OP_RV2SV              ok
1690 local($#a);             # OP_AV2ARYLEN
1691 local($x =   1);        # OP_SASSIGN
1692 local($x &&= 1);        # OP_ANDASSIGN
1693 local($x ||= 1);        # OP_ORASSIGN
1694 local($x //= 1);        # OP_DORASSIGN
1695 local($a[0]);           # OP_AELEMFAST          ok
1696
1697 local(substr($x,0,1));  # OP_SUBSTR
1698 local(pos($x));         # OP_POS
1699 local(vec($x,0,1));     # OP_VEC
1700 local($a[$b]);          # OP_AELEM              ok
1701 local($a{$b});          # OP_HELEM              ok
1702
1703 no warnings 'syntax';
1704 EXPECT
1705 Useless localization of subroutine entry at - line 10.
1706 Useless localization of exponentiation (**) at - line 11.
1707 Useless localization of multiplication (*) at - line 12.
1708 Useless localization of division (/) at - line 13.
1709 Useless localization of modulus (%) at - line 14.
1710 Useless localization of repeat (x) at - line 15.
1711 Useless localization of addition (+) at - line 16.
1712 Useless localization of subtraction (-) at - line 17.
1713 Useless localization of concatenation (.) or string at - line 18.
1714 Useless localization of left bitshift (<<) at - line 19.
1715 Useless localization of right bitshift (>>) at - line 20.
1716 Useless localization of bitwise and (&) at - line 21.
1717 Useless localization of bitwise xor (^) at - line 22.
1718 Useless localization of bitwise or (|) at - line 23.
1719 Useless localization of integer multiplication (*) at - line 26.
1720 Useless localization of integer division (/) at - line 27.
1721 Useless localization of integer modulus (%) at - line 28.
1722 Useless localization of integer addition (+) at - line 29.
1723 Useless localization of integer subtraction (-) at - line 30.
1724 Useless localization of list assignment at - line 39.
1725 Useless localization of array length at - line 41.
1726 Useless localization of scalar assignment at - line 42.
1727 Useless localization of logical and assignment (&&=) at - line 43.
1728 Useless localization of logical or assignment (||=) at - line 44.
1729 Useless localization of defined or assignment (//=) at - line 45.
1730 Useless localization of substr at - line 48.
1731 Useless localization of match position at - line 49.
1732 Useless localization of vec at - line 50.
1733 ########
1734 # op.c
1735 my $x1 if 0;
1736 my @x2 if 0;
1737 my %x3 if 0;
1738 my ($x4) if 0;
1739 my ($x5,@x6, %x7) if 0;
1740 0 && my $z1;
1741 0 && my (%z2);
1742 # these shouldn't warn
1743 our $x if 0;
1744 our $x unless 0;
1745 if (0) { my $w1 }
1746 if (my $w2) { $a=1 }
1747 if ($a && (my $w3 = 1)) {$a = 2}
1748
1749 EXPECT
1750 Deprecated use of my() in false conditional at - line 2.
1751 Deprecated use of my() in false conditional at - line 3.
1752 Deprecated use of my() in false conditional at - line 4.
1753 Deprecated use of my() in false conditional at - line 5.
1754 Deprecated use of my() in false conditional at - line 6.
1755 Deprecated use of my() in false conditional at - line 7.
1756 Deprecated use of my() in false conditional at - line 8.
1757 ########
1758 # op.c
1759 $[ = 1;
1760 ($[) = 1;
1761 use warnings 'deprecated';
1762 $[ = 2;
1763 ($[) = 2;
1764 no warnings 'deprecated';
1765 $[ = 3;
1766 ($[) = 3;
1767 EXPECT
1768 Use of assignment to $[ is deprecated at - line 2.
1769 Use of assignment to $[ is deprecated at - line 3.
1770 Use of assignment to $[ is deprecated at - line 5.
1771 Use of assignment to $[ is deprecated at - line 6.
1772 ########
1773 # op.c
1774 use warnings 'void';
1775 @x = split /y/, "z";
1776 $x = split /y/, "z";
1777      split /y/, "z";
1778 no warnings 'void';
1779 @x = split /y/, "z";
1780 $x = split /y/, "z";
1781      split /y/, "z";
1782 EXPECT
1783 Useless use of split in void context at - line 5.
1784 ########
1785 # op.c
1786 use warnings 'redefine' ;
1787 use utf8;
1788 use open qw( :utf8 :std );
1789 sub frèd {}
1790 sub frèd {}
1791 no warnings 'redefine' ;
1792 sub frèd {}
1793 EXPECT
1794 Subroutine frèd redefined at - line 6.
1795 ########
1796 # op.c
1797 use warnings 'redefine' ;
1798 use utf8;
1799 use open qw( :utf8 :std );
1800 sub frèd () { 1 }
1801 sub frèd () { 1 }
1802 no warnings 'redefine' ;
1803 sub frèd () { 1 }
1804 EXPECT
1805 Constant subroutine frèd redefined at - line 6.
1806 ########
1807 # op.c
1808 use utf8;
1809 use open qw( :utf8 :std );
1810 sub frèd () { 1 }
1811 sub frèd () { 2 }
1812 EXPECT
1813 Constant subroutine frèd redefined at - line 5.
1814 ########
1815 # op.c
1816 use utf8;
1817 use open qw( :utf8 :std );
1818 sub frèd () { 1 }
1819 *frèd = sub () { 2 };
1820 EXPECT
1821 Constant subroutine main::frèd redefined at - line 5.
1822 ########
1823 # op.c
1824 use warnings 'redefine' ;
1825 use utf8;
1826 use open qw( :utf8 :std );
1827 sub ᚠርƊ {}
1828 sub ᚠርƊ {}
1829 no warnings 'redefine' ;
1830 sub ᚠርƊ {}
1831 EXPECT
1832 Subroutine ᚠርƊ redefined at - line 6.
1833 ########
1834 # op.c
1835 use warnings 'redefine' ;
1836 use utf8;
1837 use open qw( :utf8 :std );
1838 sub ᚠርƊ () { 1 }
1839 sub ᚠርƊ () { 1 }
1840 no warnings 'redefine' ;
1841 sub ᚠርƊ () { 1 }
1842 EXPECT
1843 Constant subroutine ᚠርƊ redefined at - line 6.
1844 ########
1845 # op.c
1846 use utf8;
1847 use open qw( :utf8 :std );
1848 sub ᚠርƊ () { 1 }
1849 sub ᚠርƊ () { 2 }
1850 EXPECT
1851 Constant subroutine ᚠርƊ redefined at - line 5.
1852 ########
1853 # op.c
1854 use utf8;
1855 use open qw( :utf8 :std );
1856 sub ᚠርƊ () { 1 }
1857 *ᚠርƊ = sub () { 2 };
1858 EXPECT
1859 Constant subroutine main::ᚠርƊ redefined at - line 5.
1860 ########
1861 # OPTION regex
1862 sub DynaLoader::dl_error {};
1863 use warnings;
1864 # We're testing that the warnings report the same line number:
1865 eval <<'EOC' or die $@;
1866 {
1867     DynaLoader::boot_DynaLoader("DynaLoader");
1868 }
1869 EOC
1870 eval <<'EOC' or die $@;
1871 BEGIN {
1872     DynaLoader::boot_DynaLoader("DynaLoader");
1873 }
1874 1
1875 EOC
1876 EXPECT
1877 OPTION regex
1878 \ASubroutine DynaLoader::dl_error redefined at \(eval 1\) line 2\.
1879 ?(?s).*
1880 Subroutine DynaLoader::dl_error redefined at \(eval 2\) line 2\.
1881 ########
1882 # op.c
1883 use warnings;
1884 sub do_warn_1  { return $a or $b; }
1885 sub do_warn_2  { return $a and $b; }
1886 sub do_warn_3  { return $a xor $b; }
1887 sub do_warn_4  { die $a or $b; }
1888 sub do_warn_5  { die $a and $b; }
1889 sub do_warn_6  { die $a xor $b; }
1890 sub do_warn_7  { exit $a or $b; }
1891 sub do_warn_8  { exit $a and $b; }
1892 sub do_warn_9  { exit $a xor $b; }
1893
1894 # Since exit is an unary operator, it is even stronger than
1895 # || and &&.
1896 sub do_warn_10 { exit $a || $b; }
1897 sub do_warn_11 { exit $a && $b; }
1898
1899 sub do_warn_12 { goto $a or $b; }
1900 sub do_warn_13 { goto $a and $b; }
1901 sub do_warn_14 { goto $a xor $b; }
1902 sub do_warn_15 { next $a or $b while(1);  }
1903 sub do_warn_16 { next $a and $b while(1); }
1904 sub do_warn_17 { next $a xor $b while(1); }
1905 sub do_warn_18 { last $a or $b while(1);  }
1906 sub do_warn_19 { last $a and $b while(1); }
1907 sub do_warn_20 { last $a xor $b while(1); }
1908 sub do_warn_21 { redo $a or $b while(1); }
1909 sub do_warn_22 { redo $a and $b while(1); }
1910 sub do_warn_23 { redo $a xor $b while(1); }
1911 # These get re-written to "(return/die $a) and $b"
1912 sub do_warn_24 { $b if return $a; }
1913 sub do_warn_25 { $b if die $a; }
1914 EXPECT
1915 Possible precedence issue with control flow operator at - line 3.
1916 Possible precedence issue with control flow operator at - line 4.
1917 Possible precedence issue with control flow operator at - line 5.
1918 Possible precedence issue with control flow operator at - line 6.
1919 Possible precedence issue with control flow operator at - line 7.
1920 Possible precedence issue with control flow operator at - line 8.
1921 Possible precedence issue with control flow operator at - line 9.
1922 Possible precedence issue with control flow operator at - line 10.
1923 Possible precedence issue with control flow operator at - line 11.
1924 Possible precedence issue with control flow operator at - line 15.
1925 Possible precedence issue with control flow operator at - line 16.
1926 Possible precedence issue with control flow operator at - line 18.
1927 Possible precedence issue with control flow operator at - line 19.
1928 Possible precedence issue with control flow operator at - line 20.
1929 Possible precedence issue with control flow operator at - line 21.
1930 Possible precedence issue with control flow operator at - line 22.
1931 Possible precedence issue with control flow operator at - line 23.
1932 Possible precedence issue with control flow operator at - line 24.
1933 Possible precedence issue with control flow operator at - line 25.
1934 Possible precedence issue with control flow operator at - line 26.
1935 Possible precedence issue with control flow operator at - line 27.
1936 Possible precedence issue with control flow operator at - line 28.
1937 Possible precedence issue with control flow operator at - line 29.
1938 Possible precedence issue with control flow operator at - line 31.
1939 Possible precedence issue with control flow operator at - line 32.
1940 ########
1941 # op.c
1942 #  (same as above, except these should not warn)
1943 use constant FEATURE => 1;
1944 use constant MISSING_FEATURE => 0;
1945
1946 sub dont_warn_1  { MISSING_FEATURE and return or dont_warn_3(); }
1947 sub dont_warn_2  { FEATURE || return and dont_warn_3(); }
1948 sub dont_warn_3  { not FEATURE and return or dont_warn_3(); }
1949 sub dont_warn_4  { !MISSING_FEATURE || return and dont_warn_3(); }
1950 sub dont_warn_5  { MISSING_FEATURE and die or dont_warn_3(); }
1951 sub dont_warn_6  { FEATURE || die and dont_warn_3(); }
1952 sub dont_warn_7  { not FEATURE and die or dont_warn_3(); }
1953 sub dont_warn_8  { !MISSING_FEATURE || die and dont_warn_3(); }
1954 sub dont_warn_9  { MISSING_FEATURE and goto $a or dont_warn_3(); }
1955 sub dont_warn_10 { FEATURE || goto $a and dont_warn_3(); }
1956 sub dont_warn_11 { not FEATURE and goto $a or dont_warn_3(); }
1957 sub dont_warn_12 { !MISSING_FEATURE || goto $a and dont_warn_3(); }
1958
1959 sub dont_warn_13 { MISSING_FEATURE and exit $a or dont_warn_3(); }
1960 sub dont_warn_14 { FEATURE || exit $a and dont_warn_3(); }
1961 sub dont_warn_15 { not FEATURE and exit $a or dont_warn_3(); }
1962 sub dont_warn_16 { !MISSING_FEATURE || exit $a and dont_warn_3(); }
1963
1964 sub dont_warn_17 { MISSING_FEATURE and next or dont_warn_3() while(1); }
1965 sub dont_warn_18 { FEATURE || next and dont_warn_3() while(1); }
1966 sub dont_warn_19 { not FEATURE and next or dont_warn_3() while(1); }
1967 sub dont_warn_20 { !MISSING_FEATURE || next and dont_warn_3() while(1); }
1968 sub dont_warn_21 { MISSING_FEATURE and redo or dont_warn_3() while(1); }
1969 sub dont_warn_22 { FEATURE || redo and dont_warn_3() while(1); }
1970 sub dont_warn_23 { not FEATURE and redo or dont_warn_3() while(1); }
1971 sub dont_warn_24 { !MISSING_FEATURE || redo and dont_warn_3() while(1); }
1972 sub dont_warn_25 { MISSING_FEATURE and last or dont_warn_3() while(1); }
1973 sub dont_warn_26 { FEATURE || last and dont_warn_3() while(1); }
1974 sub dont_warn_27 { not FEATURE and last or dont_warn_3() while(1); }
1975 sub dont_warn_28 { !MISSING_FEATURE || last and dont_warn_3() while(1); }
1976
1977 # These are weird, but at least not ambiguous.
1978 sub dont_warn_29 { return ($a or $b); }
1979 sub dont_warn_30 { return ($a and $b); }
1980 sub dont_warn_31 { return ($a xor $b); }
1981 sub dont_warn_32 { die ($a or $b); }
1982 sub dont_warn_33 { die ($a and $b); }
1983 sub dont_warn_34 { die ($a xor $b); }
1984 sub dont_warn_35 { goto ($a or $b); }
1985 sub dont_warn_36 { goto ($a and $b); }
1986 sub dont_warn_37 { goto ($a xor $b); }
1987 sub dont_warn_38 { next ($a or $b) while(1);  }
1988 sub dont_warn_39 { next ($a and $b) while(1); }
1989 sub dont_warn_40 { next ($a xor $b) while(1); }
1990 sub dont_warn_41 { last ($a or $b) while(1);  }
1991 sub dont_warn_42 { last ($a and $b) while(1); }
1992 sub dont_warn_43 { last ($a xor $b) while(1); }
1993 sub dont_warn_44 { redo ($a or $b) while(1);  }
1994 sub dont_warn_45 { redo ($a and $b) while(1); }
1995 sub dont_warn_46 { redo ($a xor $b) while(1); }
1996 EXPECT
1997 ########
1998 use feature "signatures";
1999 sub aaa { 2 }
2000 sub bbb ($a) { 4 }
2001 $aaa = sub { 2 };
2002 $bbb = sub ($a) { 4 };
2003 EXPECT
2004 The signatures feature is experimental at - line 3.
2005 The signatures feature is experimental at - line 5.
2006 ########
2007 no warnings "experimental::signatures";
2008 use feature "signatures";
2009 sub aaa { 2 }
2010 sub bbb ($a) { 4 }
2011 $aaa = sub { 2 };
2012 $bbb = sub ($a) { 4 };
2013 EXPECT
2014 ########
2015 use warnings 'numeric';
2016 my $c = -4.5;
2017 my $a = "y" x $c;
2018 my $b = "y" x -3;
2019 no warnings 'numeric';
2020 my $d = "y" x $c;
2021 my $e = "y" x -3;
2022 no warnings 'numeric';
2023 EXPECT
2024 Negative repeat count does nothing at - line 3.
2025 Negative repeat count does nothing at - line 4.
2026 ########
2027 my $a = "inf" + 0;
2028 my $b = -$a;
2029 my $c = "nan" + 0;
2030 use warnings 'numeric';
2031 my $x = "x" x $a;
2032 my $y = "y" x $b;
2033 my $z = "z" x $c;
2034 no warnings 'numeric';
2035 my $x = "x" x $a;
2036 my $y = "y" x $b;
2037 my $z = "z" x $c;
2038 no warnings 'numeric';
2039 EXPECT
2040 Non-finite repeat count does nothing at - line 5.
2041 Non-finite repeat count does nothing at - line 6.
2042 Non-finite repeat count does nothing at - line 7.