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