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