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