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