xref: /openbsd-src/gnu/usr.bin/perl/t/lib/warnings/op (revision 2b0358df1d88d06ef4139321dd05bd5e05d91eaf)
1  op.c		AOK
2
3     Found = in conditional, should be ==
4	1 if $a = 1 ;
5
6     Use of implicit split to @_ is deprecated
7	split ;
8
9     Use of implicit split to @_ is deprecated
10	$a = split ;
11
12     Useless use of time in void context
13     Useless use of a variable in void context
14     Useless use of a constant in void context
15	time ;
16	$a ;
17	"abc"
18
19     Useless use of sort in scalar context
20	my $x = sort (2,1,3);
21
22     Applying %s to %s will act on scalar(%s)
23	my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
24	@a =~ /abc/ ;
25	@a =~ s/a/b/ ;
26	@a =~ tr/a/b/ ;
27	@$b =~ /abc/ ;
28	@$b =~ s/a/b/ ;
29	@$b =~ tr/a/b/ ;
30	%a =~ /abc/ ;
31	%a =~ s/a/b/ ;
32	%a =~ tr/a/b/ ;
33	%$c =~ /abc/ ;
34	%$c =~ s/a/b/ ;
35	%$c =~ tr/a/b/ ;
36
37
38     Parentheses missing around "my" list at -e line 1.
39       my $a, $b = (1,2);
40
41     Parentheses missing around "local" list at -e line 1.
42       local $a, $b = (1,2);
43
44     Bareword found in conditional at -e line 1.
45       use warnings 'bareword'; my $x = print(ABC || 1);
46
47     Value of %s may be \"0\"; use \"defined\"
48	$x = 1 if $x = <FH> ;
49	$x = 1 while $x = <FH> ;
50
51     Subroutine fred redefined at -e line 1.
52       sub fred{1;} sub fred{1;}
53
54     Constant subroutine %s redefined
55        sub fred() {1;} sub fred() {1;}
56
57     Format FRED redefined at /tmp/x line 5.
58       format FRED =
59       .
60       format FRED =
61       .
62
63     Array @%s missing the @ in argument %d of %s()
64	push fred ;
65
66     Hash %%%s missing the %% in argument %d of %s()
67	keys joe ;
68
69     Statement unlikely to be reached
70     	(Maybe you meant system() when you said exec()?
71 	exec "true" ; my $a
72
73     defined(@array) is deprecated
74     	(Maybe you should just omit the defined()?)
75	my @a ; defined @a ;
76	defined (@a = (1,2,3)) ;
77
78     defined(%hash) is deprecated
79     	(Maybe you should just omit the defined()?)
80	my %h ; defined %h ;
81
82     /---/ should probably be written as "---"
83        join(/---/, @foo);
84
85    %s() called too early to check prototype		[Perl_peep]
86        fred() ; sub fred ($$) {}
87
88
89    Package `%s' not found (did you use the incorrect case?)
90
91    Use of /g modifier is meaningless in split
92
93    Possible precedence problem on bitwise %c operator	[Perl_ck_bitop]
94
95    Mandatory Warnings
96    ------------------
97    Prototype mismatch:		[cv_ckproto]
98        sub fred() ;
99        sub fred($) {}
100
101    Runaway prototype		[newSUB]	TODO
102    oops: oopsAV		[oopsAV]	TODO
103    oops: oopsHV		[oopsHV]	TODO
104
105__END__
106# op.c
107use warnings 'syntax' ;
1081 if $a = 1 ;
109no warnings 'syntax' ;
1101 if $a = 1 ;
111EXPECT
112Found = in conditional, should be == at - line 3.
113########
114# op.c
115use warnings 'deprecated' ;
116split ;
117no warnings 'deprecated' ;
118split ;
119EXPECT
120Use of implicit split to @_ is deprecated at - line 3.
121########
122# op.c
123use warnings 'deprecated' ;
124$a = split ;
125no warnings 'deprecated' ;
126$a = split ;
127EXPECT
128Use of implicit split to @_ is deprecated at - line 3.
129########
130# op.c
131use warnings 'deprecated';
132my (@foo, %foo);
133%main::foo->{"bar"};
134%foo->{"bar"};
135@main::foo->[23];
136@foo->[23];
137$main::foo = {}; %$main::foo->{"bar"};
138$foo = {}; %$foo->{"bar"};
139$main::foo = []; @$main::foo->[34];
140$foo = []; @$foo->[34];
141no warnings 'deprecated';
142%main::foo->{"bar"};
143%foo->{"bar"};
144@main::foo->[23];
145@foo->[23];
146$main::foo = {}; %$main::foo->{"bar"};
147$foo = {}; %$foo->{"bar"};
148$main::foo = []; @$main::foo->[34];
149$foo = []; @$foo->[34];
150EXPECT
151Using a hash as a reference is deprecated at - line 4.
152Using a hash as a reference is deprecated at - line 5.
153Using an array as a reference is deprecated at - line 6.
154Using an array as a reference is deprecated at - line 7.
155Using a hash as a reference is deprecated at - line 8.
156Using a hash as a reference is deprecated at - line 9.
157Using an array as a reference is deprecated at - line 10.
158Using an array as a reference is deprecated at - line 11.
159########
160# op.c
161use warnings 'void' ; close STDIN ;
1621 x 3 ;			# OP_REPEAT
163			# OP_GVSV
164wantarray ; 		# OP_WANTARRAY
165			# OP_GV
166			# OP_PADSV
167			# OP_PADAV
168			# OP_PADHV
169			# OP_PADANY
170			# OP_AV2ARYLEN
171ref ;			# OP_REF
172\@a ;			# OP_REFGEN
173\$a ;			# OP_SREFGEN
174defined $a ;		# OP_DEFINED
175hex $a ;		# OP_HEX
176oct $a ;		# OP_OCT
177length $a ;		# OP_LENGTH
178substr $a,1 ;		# OP_SUBSTR
179vec $a,1,2 ;		# OP_VEC
180index $a,1,2 ;		# OP_INDEX
181rindex $a,1,2 ;		# OP_RINDEX
182sprintf $a ;		# OP_SPRINTF
183$a[0] ;			# OP_AELEM
184			# OP_AELEMFAST
185@a[0] ;			# OP_ASLICE
186#values %a ;		# OP_VALUES
187#keys %a ;		# OP_KEYS
188$a{0} ;			# OP_HELEM
189@a{0} ;			# OP_HSLICE
190unpack "a", "a" ;	# OP_UNPACK
191pack $a,"" ;		# OP_PACK
192join "" ;		# OP_JOIN
193(@a)[0,1] ;		# OP_LSLICE
194			# OP_ANONLIST
195			# OP_ANONHASH
196sort(1,2) ;		# OP_SORT
197reverse(1,2) ;		# OP_REVERSE
198			# OP_RANGE
199			# OP_FLIP
200(1 ..2) ;		# OP_FLOP
201caller ;		# OP_CALLER
202fileno STDIN ;		# OP_FILENO
203eof STDIN ;		# OP_EOF
204tell STDIN ;		# OP_TELL
205readlink 1;		# OP_READLINK
206time ;			# OP_TIME
207localtime ;		# OP_LOCALTIME
208gmtime ;		# OP_GMTIME
209eval { getgrnam 1 };	# OP_GGRNAM
210eval { getgrgid 1 };	# OP_GGRGID
211eval { getpwnam 1 };	# OP_GPWNAM
212eval { getpwuid 1 };	# OP_GPWUID
213prototype "foo";	# OP_PROTOTYPE
214EXPECT
215Useless use of repeat (x) in void context at - line 3.
216Useless use of wantarray in void context at - line 5.
217Useless use of reference-type operator in void context at - line 12.
218Useless use of reference constructor in void context at - line 13.
219Useless use of single ref constructor in void context at - line 14.
220Useless use of defined operator in void context at - line 15.
221Useless use of hex in void context at - line 16.
222Useless use of oct in void context at - line 17.
223Useless use of length in void context at - line 18.
224Useless use of substr in void context at - line 19.
225Useless use of vec in void context at - line 20.
226Useless use of index in void context at - line 21.
227Useless use of rindex in void context at - line 22.
228Useless use of sprintf in void context at - line 23.
229Useless use of array element in void context at - line 24.
230Useless use of array slice in void context at - line 26.
231Useless use of hash element in void context at - line 29.
232Useless use of hash slice in void context at - line 30.
233Useless use of unpack in void context at - line 31.
234Useless use of pack in void context at - line 32.
235Useless use of join or string in void context at - line 33.
236Useless use of list slice in void context at - line 34.
237Useless use of sort in void context at - line 37.
238Useless use of reverse in void context at - line 38.
239Useless use of range (or flop) in void context at - line 41.
240Useless use of caller in void context at - line 42.
241Useless use of fileno in void context at - line 43.
242Useless use of eof in void context at - line 44.
243Useless use of tell in void context at - line 45.
244Useless use of readlink in void context at - line 46.
245Useless use of time in void context at - line 47.
246Useless use of localtime in void context at - line 48.
247Useless use of gmtime in void context at - line 49.
248Useless use of getgrnam in void context at - line 50.
249Useless use of getgrgid in void context at - line 51.
250Useless use of getpwnam in void context at - line 52.
251Useless use of getpwuid in void context at - line 53.
252Useless use of subroutine prototype in void context at - line 54.
253########
254# op.c
255use warnings 'void' ; close STDIN ;
256my $x = sort (2,1,3);
257no warnings 'void' ;
258$x = sort (2,1,3);
259EXPECT
260Useless use of sort in scalar context at - line 3.
261########
262# op.c
263no warnings 'void' ; close STDIN ;
2641 x 3 ;			# OP_REPEAT
265			# OP_GVSV
266wantarray ; 		# OP_WANTARRAY
267			# OP_GV
268			# OP_PADSV
269			# OP_PADAV
270			# OP_PADHV
271			# OP_PADANY
272			# OP_AV2ARYLEN
273ref ;			# OP_REF
274\@a ;			# OP_REFGEN
275\$a ;			# OP_SREFGEN
276defined $a ;		# OP_DEFINED
277hex $a ;		# OP_HEX
278oct $a ;		# OP_OCT
279length $a ;		# OP_LENGTH
280substr $a,1 ;		# OP_SUBSTR
281vec $a,1,2 ;		# OP_VEC
282index $a,1,2 ;		# OP_INDEX
283rindex $a,1,2 ;		# OP_RINDEX
284sprintf $a ;		# OP_SPRINTF
285$a[0] ;			# OP_AELEM
286			# OP_AELEMFAST
287@a[0] ;			# OP_ASLICE
288#values %a ;		# OP_VALUES
289#keys %a ;		# OP_KEYS
290$a{0} ;			# OP_HELEM
291@a{0} ;			# OP_HSLICE
292unpack "a", "a" ;	# OP_UNPACK
293pack $a,"" ;		# OP_PACK
294join "" ;		# OP_JOIN
295(@a)[0,1] ;		# OP_LSLICE
296			# OP_ANONLIST
297			# OP_ANONHASH
298sort(1,2) ;		# OP_SORT
299reverse(1,2) ;		# OP_REVERSE
300			# OP_RANGE
301			# OP_FLIP
302(1 ..2) ;		# OP_FLOP
303caller ;		# OP_CALLER
304fileno STDIN ;		# OP_FILENO
305eof STDIN ;		# OP_EOF
306tell STDIN ;		# OP_TELL
307readlink 1;		# OP_READLINK
308time ;			# OP_TIME
309localtime ;		# OP_LOCALTIME
310gmtime ;		# OP_GMTIME
311eval { getgrnam 1 };	# OP_GGRNAM
312eval { getgrgid 1 };	# OP_GGRGID
313eval { getpwnam 1 };	# OP_GPWNAM
314eval { getpwuid 1 };	# OP_GPWUID
315prototype "foo";	# OP_PROTOTYPE
316EXPECT
317########
318# op.c
319use warnings 'void' ;
320for (@{[0]}) { "$_" }		# check warning isn't duplicated
321no warnings 'void' ;
322for (@{[0]}) { "$_" }		# check warning isn't duplicated
323EXPECT
324Useless use of string in void context at - line 3.
325########
326# op.c
327use warnings 'void' ;
328use Config ;
329BEGIN {
330    if ( ! $Config{d_telldir}) {
331        print <<EOM ;
332SKIPPED
333# telldir not present
334EOM
335        exit
336    }
337}
338telldir 1 ;		# OP_TELLDIR
339no warnings 'void' ;
340telldir 1 ;		# OP_TELLDIR
341EXPECT
342Useless use of telldir in void context at - line 13.
343########
344# op.c
345use warnings 'void' ;
346use Config ;
347BEGIN {
348    if ( ! $Config{d_getppid}) {
349        print <<EOM ;
350SKIPPED
351# getppid not present
352EOM
353        exit
354    }
355}
356getppid ;		# OP_GETPPID
357no warnings 'void' ;
358getppid ;		# OP_GETPPID
359EXPECT
360Useless use of getppid in void context at - line 13.
361########
362# op.c
363use warnings 'void' ;
364use Config ;
365BEGIN {
366    if ( ! $Config{d_getpgrp}) {
367        print <<EOM ;
368SKIPPED
369# getpgrp not present
370EOM
371        exit
372    }
373}
374getpgrp ;		# OP_GETPGRP
375no warnings 'void' ;
376getpgrp ;		# OP_GETPGRP
377EXPECT
378Useless use of getpgrp in void context at - line 13.
379########
380# op.c
381use warnings 'void' ;
382use Config ;
383BEGIN {
384    if ( ! $Config{d_times}) {
385        print <<EOM ;
386SKIPPED
387# times not present
388EOM
389        exit
390    }
391}
392times ;			# OP_TMS
393no warnings 'void' ;
394times ;			# OP_TMS
395EXPECT
396Useless use of times in void context at - line 13.
397########
398# op.c
399use warnings 'void' ;
400use Config ;
401BEGIN {
402    if ( ! $Config{d_getprior} or $^O eq 'os2') { # Locks before fixpak22
403        print <<EOM ;
404SKIPPED
405# getpriority not present
406EOM
407        exit
408    }
409}
410getpriority 1,2;	# OP_GETPRIORITY
411no warnings 'void' ;
412getpriority 1,2;	# OP_GETPRIORITY
413EXPECT
414Useless use of getpriority in void context at - line 13.
415########
416# op.c
417use warnings 'void' ;
418use Config ;
419BEGIN {
420    if ( ! $Config{d_getlogin}) {
421        print <<EOM ;
422SKIPPED
423# getlogin not present
424EOM
425        exit
426    }
427}
428getlogin ;			# OP_GETLOGIN
429no warnings 'void' ;
430getlogin ;			# OP_GETLOGIN
431EXPECT
432Useless use of getlogin in void context at - line 13.
433########
434# op.c
435use warnings 'void' ;
436use Config ; BEGIN {
437if ( ! $Config{d_socket}) {
438    print <<EOM ;
439SKIPPED
440# getsockname not present
441# getpeername not present
442# gethostbyname not present
443# gethostbyaddr not present
444# gethostent not present
445# getnetbyname not present
446# getnetbyaddr not present
447# getnetent not present
448# getprotobyname not present
449# getprotobynumber not present
450# getprotoent not present
451# getservbyname not present
452# getservbyport not present
453# getservent not present
454EOM
455    exit
456} }
457getsockname STDIN ;	# OP_GETSOCKNAME
458getpeername STDIN ;	# OP_GETPEERNAME
459gethostbyname 1 ;	# OP_GHBYNAME
460gethostbyaddr 1,2;	# OP_GHBYADDR
461gethostent ;		# OP_GHOSTENT
462getnetbyname 1 ;	# OP_GNBYNAME
463getnetbyaddr 1,2 ;	# OP_GNBYADDR
464getnetent ;		# OP_GNETENT
465getprotobyname 1;	# OP_GPBYNAME
466getprotobynumber 1;	# OP_GPBYNUMBER
467getprotoent ;		# OP_GPROTOENT
468getservbyname 1,2;	# OP_GSBYNAME
469getservbyport 1,2;	# OP_GSBYPORT
470getservent ;		# OP_GSERVENT
471
472no warnings 'void' ;
473getsockname STDIN ;	# OP_GETSOCKNAME
474getpeername STDIN ;	# OP_GETPEERNAME
475gethostbyname 1 ;	# OP_GHBYNAME
476gethostbyaddr 1,2;	# OP_GHBYADDR
477gethostent ;		# OP_GHOSTENT
478getnetbyname 1 ;	# OP_GNBYNAME
479getnetbyaddr 1,2 ;	# OP_GNBYADDR
480getnetent ;		# OP_GNETENT
481getprotobyname 1;	# OP_GPBYNAME
482getprotobynumber 1;	# OP_GPBYNUMBER
483getprotoent ;		# OP_GPROTOENT
484getservbyname 1,2;	# OP_GSBYNAME
485getservbyport 1,2;	# OP_GSBYPORT
486getservent ;		# OP_GSERVENT
487INIT {
488   # some functions may not be there, so we exit without running
489   exit;
490}
491EXPECT
492Useless use of getsockname in void context at - line 24.
493Useless use of getpeername in void context at - line 25.
494Useless use of gethostbyname in void context at - line 26.
495Useless use of gethostbyaddr in void context at - line 27.
496Useless use of gethostent in void context at - line 28.
497Useless use of getnetbyname in void context at - line 29.
498Useless use of getnetbyaddr in void context at - line 30.
499Useless use of getnetent in void context at - line 31.
500Useless use of getprotobyname in void context at - line 32.
501Useless use of getprotobynumber in void context at - line 33.
502Useless use of getprotoent in void context at - line 34.
503Useless use of getservbyname in void context at - line 35.
504Useless use of getservbyport in void context at - line 36.
505Useless use of getservent in void context at - line 37.
506########
507# op.c
508use warnings 'void' ;
509*a ; # OP_RV2GV
510$a ; # OP_RV2SV
511@a ; # OP_RV2AV
512%a ; # OP_RV2HV
513no warnings 'void' ;
514*a ; # OP_RV2GV
515$a ; # OP_RV2SV
516@a ; # OP_RV2AV
517%a ; # OP_RV2HV
518EXPECT
519Useless use of a variable in void context at - line 3.
520Useless use of a variable in void context at - line 4.
521Useless use of a variable in void context at - line 5.
522Useless use of a variable in void context at - line 6.
523########
524# op.c
525use warnings 'void' ;
526"abc"; # OP_CONST
5277 ; # OP_CONST
5285 || print "bad\n";	# test OPpCONST_SHORTCIRCUIT
529use constant U => undef;
530print "boo\n" if U;	# test OPpCONST_SHORTCIRCUIT
531$[ = 2; # should not warn
532no warnings 'void' ;
533"abc"; # OP_CONST
5347 ; # OP_CONST
535EXPECT
536Useless use of a constant in void context at - line 3.
537Useless use of a constant in void context at - line 4.
538########
539# op.c
540#
541use warnings 'misc' ;
542my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
543@a =~ /abc/ ;
544@a =~ s/a/b/ ;
545@a =~ tr/a/b/ ;
546@$b =~ /abc/ ;
547@$b =~ s/a/b/ ;
548@$b =~ tr/a/b/ ;
549%a =~ /abc/ ;
550%a =~ s/a/b/ ;
551%a =~ tr/a/b/ ;
552%$c =~ /abc/ ;
553%$c =~ s/a/b/ ;
554%$c =~ tr/a/b/ ;
555{
556no warnings 'misc' ;
557my $a ; my @a = () ; my %a = () ; my $b = \@a ; my $c = \%a ;
558@a =~ /abc/ ;
559@a =~ s/a/b/ ;
560@a =~ tr/a/b/ ;
561@$b =~ /abc/ ;
562@$b =~ s/a/b/ ;
563@$b =~ tr/a/b/ ;
564%a =~ /abc/ ;
565%a =~ s/a/b/ ;
566%a =~ tr/a/b/ ;
567%$c =~ /abc/ ;
568%$c =~ s/a/b/ ;
569%$c =~ tr/a/b/ ;
570}
571EXPECT
572Applying pattern match (m//) to @array will act on scalar(@array) at - line 5.
573Applying substitution (s///) to @array will act on scalar(@array) at - line 6.
574Applying transliteration (tr///) to @array will act on scalar(@array) at - line 7.
575Applying pattern match (m//) to @array will act on scalar(@array) at - line 8.
576Applying substitution (s///) to @array will act on scalar(@array) at - line 9.
577Applying transliteration (tr///) to @array will act on scalar(@array) at - line 10.
578Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 11.
579Applying substitution (s///) to %hash will act on scalar(%hash) at - line 12.
580Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 13.
581Applying pattern match (m//) to %hash will act on scalar(%hash) at - line 14.
582Applying substitution (s///) to %hash will act on scalar(%hash) at - line 15.
583Applying transliteration (tr///) to %hash will act on scalar(%hash) at - line 16.
584Can't modify private array in substitution (s///) at - line 6, near "s/a/b/ ;"
585BEGIN not safe after errors--compilation aborted at - line 18.
586########
587# op.c
588use warnings 'parenthesis' ;
589my $a, $b = (1,2);
590my @foo,%bar,	$quux; # there's a TAB here
591my $x, $y or print;
592no warnings 'parenthesis' ;
593my $c, $d = (1,2);
594EXPECT
595Parentheses missing around "my" list at - line 3.
596Parentheses missing around "my" list at - line 4.
597########
598# op.c
599use warnings 'parenthesis' ;
600our $a, $b = (1,2);
601no warnings 'parenthesis' ;
602our $c, $d = (1,2);
603EXPECT
604Parentheses missing around "our" list at - line 3.
605########
606# op.c
607use warnings 'parenthesis' ;
608local $a, $b = (1,2);
609local *f, *g;
610no warnings 'parenthesis' ;
611local $c, $d = (1,2);
612EXPECT
613Parentheses missing around "local" list at - line 3.
614Parentheses missing around "local" list at - line 4.
615########
616# op.c
617use warnings 'bareword' ;
618print (ABC || 1) ;
619no warnings 'bareword' ;
620print (ABC || 1) ;
621EXPECT
622Bareword found in conditional at - line 3.
623########
624--FILE-- abc
625
626--FILE--
627# op.c
628use warnings 'misc' ;
629open FH, "<abc" ;
630$x = 1 if $x = <FH> ;
631no warnings 'misc' ;
632$x = 1 if $x = <FH> ;
633EXPECT
634Value of <HANDLE> construct can be "0"; test with defined() at - line 4.
635########
636# op.c
637use warnings 'misc' ;
638opendir FH, "." ;
639$x = 1 if $x = readdir FH ;
640no warnings 'misc' ;
641$x = 1 if $x = readdir FH ;
642closedir FH ;
643EXPECT
644Value of readdir() operator can be "0"; test with defined() at - line 4.
645########
646# op.c
647use warnings 'misc' ;
648$x = 1 if $x = <*> ;
649no warnings 'misc' ;
650$x = 1 if $x = <*> ;
651EXPECT
652Value of glob construct can be "0"; test with defined() at - line 3.
653########
654# op.c
655use warnings 'misc' ;
656%a = (1,2,3,4) ;
657$x = 1 if $x = each %a ;
658no warnings 'misc' ;
659$x = 1 if $x = each %a ;
660EXPECT
661Value of each() operator can be "0"; test with defined() at - line 4.
662########
663# op.c
664use warnings 'misc' ;
665$x = 1 while $x = <*> and 0 ;
666no warnings 'misc' ;
667$x = 1 while $x = <*> and 0 ;
668EXPECT
669Value of glob construct can be "0"; test with defined() at - line 3.
670########
671# op.c
672use warnings 'misc' ;
673opendir FH, "." ;
674$x = 1 while $x = readdir FH and 0 ;
675no warnings 'misc' ;
676$x = 1 while $x = readdir FH and 0 ;
677closedir FH ;
678EXPECT
679Value of readdir() operator can be "0"; test with defined() at - line 4.
680########
681# op.c
682use warnings 'misc';
683open FH, "<abc";
684($_ = <FH>) // ($_ = 1);
685opendir DH, ".";
686%a = (1,2,3,4) ;
687EXPECT
688########
689# op.c
690use warnings 'redefine' ;
691sub fred {}
692sub fred {}
693no warnings 'redefine' ;
694sub fred {}
695EXPECT
696Subroutine fred redefined at - line 4.
697########
698# op.c
699use warnings 'redefine' ;
700sub fred () { 1 }
701sub fred () { 1 }
702no warnings 'redefine' ;
703sub fred () { 1 }
704EXPECT
705Constant subroutine fred redefined at - line 4.
706########
707# op.c
708no warnings 'redefine' ;
709sub fred () { 1 }
710sub fred () { 2 }
711EXPECT
712Constant subroutine fred redefined at - line 4.
713########
714# op.c
715no warnings 'redefine' ;
716sub fred () { 1 }
717*fred = sub () { 2 };
718EXPECT
719Constant subroutine main::fred redefined at - line 4.
720########
721# op.c
722use warnings 'redefine' ;
723format FRED =
724.
725format FRED =
726.
727no warnings 'redefine' ;
728format FRED =
729.
730EXPECT
731Format FRED redefined at - line 5.
732########
733# op.c
734use warnings 'deprecated' ;
735push FRED;
736no warnings 'deprecated' ;
737push FRED;
738EXPECT
739Array @FRED missing the @ in argument 1 of push() at - line 3.
740########
741# op.c
742use warnings 'deprecated' ;
743@a = keys FRED ;
744no warnings 'deprecated' ;
745@a = keys FRED ;
746EXPECT
747Hash %FRED missing the % in argument 1 of keys() at - line 3.
748########
749# op.c
750BEGIN {
751    if ($^O eq 'MacOS') {
752	print <<EOM;
753SKIPPED
754# no exec on Mac OS
755EOM
756	exit;
757    }
758}
759use warnings 'syntax' ;
760exec "$^X -e 1" ;
761my $a
762EXPECT
763Statement unlikely to be reached at - line 13.
764	(Maybe you meant system() when you said exec()?)
765########
766# op.c
767use warnings 'deprecated' ;
768my @a; defined(@a);
769EXPECT
770defined(@array) is deprecated at - line 3.
771	(Maybe you should just omit the defined()?)
772########
773# op.c
774use warnings 'deprecated' ;
775defined(@a = (1,2,3));
776EXPECT
777defined(@array) is deprecated at - line 3.
778	(Maybe you should just omit the defined()?)
779########
780# op.c
781use warnings 'deprecated' ;
782my %h; defined(%h);
783EXPECT
784defined(%hash) is deprecated at - line 3.
785	(Maybe you should just omit the defined()?)
786########
787# op.c
788BEGIN {
789    if ($^O eq 'MacOS') {
790	print <<EOM;
791SKIPPED
792# no exec on Mac OS
793EOM
794	exit;
795    }
796}
797no warnings 'syntax' ;
798exec "$^X -e 1" ;
799my $a
800EXPECT
801
802########
803# op.c
804sub fred();
805sub fred($) {}
806EXPECT
807Prototype mismatch: sub main::fred () vs ($) at - line 3.
808########
809# op.c
810$^W = 0 ;
811sub fred() ;
812sub fred($) {}
813{
814    no warnings 'prototype' ;
815    sub Fred() ;
816    sub Fred($) {}
817    use warnings 'prototype' ;
818    sub freD() ;
819    sub freD($) {}
820}
821sub FRED() ;
822sub FRED($) {}
823EXPECT
824Prototype mismatch: sub main::fred () vs ($) at - line 4.
825Prototype mismatch: sub main::freD () vs ($) at - line 11.
826Prototype mismatch: sub main::FRED () vs ($) at - line 14.
827########
828# op.c
829use warnings 'syntax' ;
830join /---/, 'x', 'y', 'z';
831EXPECT
832/---/ should probably be written as "---" at - line 3.
833########
834# op.c [Perl_peep]
835use warnings 'prototype' ;
836fred() ;
837sub fred ($$) {}
838no warnings 'prototype' ;
839joe() ;
840sub joe ($$) {}
841EXPECT
842main::fred() called too early to check prototype at - line 3.
843########
844# op.c [Perl_newATTRSUB]
845--FILE-- abc.pm
846use warnings 'void' ;
847BEGIN { $| = 1; print "in begin\n"; }
848CHECK { print "in check\n"; }
849INIT { print "in init\n"; }
850END { print "in end\n"; }
851print "in mainline\n";
8521;
853--FILE--
854use abc;
855delete $INC{"abc.pm"};
856require abc;
857do "abc.pm";
858EXPECT
859in begin
860in mainline
861in check
862in init
863in begin
864Too late to run CHECK block at abc.pm line 3.
865Too late to run INIT block at abc.pm line 4.
866in mainline
867in begin
868Too late to run CHECK block at abc.pm line 3.
869Too late to run INIT block at abc.pm line 4.
870in mainline
871in end
872in end
873in end
874########
875# op.c [Perl_newATTRSUB]
876--FILE-- abc.pm
877no warnings 'void' ;
878BEGIN { $| = 1; print "in begin\n"; }
879CHECK { print "in check\n"; }
880INIT { print "in init\n"; }
881END { print "in end\n"; }
882print "in mainline\n";
8831;
884--FILE--
885require abc;
886do "abc.pm";
887EXPECT
888in begin
889in mainline
890in begin
891in mainline
892in end
893in end
894########
895# op.c
896my @x;
897use warnings 'syntax' ;
898push(@x);
899unshift(@x);
900no warnings 'syntax' ;
901push(@x);
902unshift(@x);
903EXPECT
904Useless use of push with no values at - line 4.
905Useless use of unshift with no values at - line 5.
906########
907# op.c
908# 20020401 mjd@plover.com at suggestion of jfriedl@yahoo.com
909use warnings 'regexp';
910split /blah/g, "blah";
911no warnings 'regexp';
912split /blah/g, "blah";
913EXPECT
914Use of /g modifier is meaningless in split at - line 4.
915########
916# op.c
917use warnings 'precedence';
918$a = $b & $c == $d;
919$a = $b ^ $c != $d;
920$a = $b | $c > $d;
921$a = $b < $c & $d;
922$a = $b >= $c ^ $d;
923$a = $b <= $c | $d;
924$a = $b <=> $c & $d;
925$a &= $b == $c; $a |= $b == $c; $a ^= $b == $c; # shouldn't warn
926no warnings 'precedence';
927$a = $b & $c == $d;
928$a = $b ^ $c != $d;
929$a = $b | $c > $d;
930$a = $b < $c & $d;
931$a = $b >= $c ^ $d;
932$a = $b <= $c | $d;
933$a = $b <=> $c & $d;
934EXPECT
935Possible precedence problem on bitwise & operator at - line 3.
936Possible precedence problem on bitwise ^ operator at - line 4.
937Possible precedence problem on bitwise | operator at - line 5.
938Possible precedence problem on bitwise & operator at - line 6.
939Possible precedence problem on bitwise ^ operator at - line 7.
940Possible precedence problem on bitwise | operator at - line 8.
941Possible precedence problem on bitwise & operator at - line 9.
942########
943# op.c
944use integer;
945use warnings 'precedence';
946$a = $b & $c == $d;
947$a = $b ^ $c != $d;
948$a = $b | $c > $d;
949$a = $b < $c & $d;
950$a = $b >= $c ^ $d;
951$a = $b <= $c | $d;
952$a = $b <=> $c & $d;
953no warnings 'precedence';
954$a = $b & $c == $d;
955$a = $b ^ $c != $d;
956$a = $b | $c > $d;
957$a = $b < $c & $d;
958$a = $b >= $c ^ $d;
959$a = $b <= $c | $d;
960$a = $b <=> $c & $d;
961EXPECT
962Possible precedence problem on bitwise & operator at - line 4.
963Possible precedence problem on bitwise ^ operator at - line 5.
964Possible precedence problem on bitwise | operator at - line 6.
965Possible precedence problem on bitwise & operator at - line 7.
966Possible precedence problem on bitwise ^ operator at - line 8.
967Possible precedence problem on bitwise | operator at - line 9.
968Possible precedence problem on bitwise & operator at - line 10.
969########
970# op.c
971
972# ok	=> local() has desired effect;
973# ignore=> local() silently ignored
974
975use warnings 'syntax';
976
977local(undef);		# OP_UNDEF		ignore
978sub lval : lvalue {};
979local(lval());		# OP_ENTERSUB
980local($x **= 1);	# OP_POW
981local($x *=  1);	# OP_MULTIPLY
982local($x /=  1);	# OP_DIVIDE
983local($x %=  1);	# OP_MODULO
984local($x x=  1);	# OP_REPEAT
985local($x +=  1);	# OP_ADD
986local($x -=  1);	# OP_SUBTRACT
987local($x .=  1);	# OP_CONCAT
988local($x <<= 1);	# OP_LEFT_SHIFT
989local($x >>= 1);	# OP_RIGHT_SHIFT
990local($x &=  1);	# OP_BIT_AND
991local($x ^=  1);	# OP_BIT_XOR
992local($x |=  1);	# OP_BIT_OR
993{
994    use integer;
995    local($x *= 1);	# OP_I_MULTIPLY
996    local($x /= 1);	# OP_I_DIVIDE
997    local($x %= 1);	# OP_I_MODULO
998    local($x += 1);	# OP_I_ADD
999    local($x -= 1);	# OP_I_SUBTRACT
1000}
1001local($x?$y:$z) = 1;	# OP_COND_EXPR		ok
1002# these two are fatal run-time errors instead
1003#local(@$a);		# OP_RV2AV		ok
1004#local(%$a);		# OP_RV2HV		ok
1005local(*a);		# OP_RV2GV		ok
1006local(@a[1,2]);		# OP_ASLICE		ok
1007local(@a{1,2});		# OP_HSLICE		ok
1008local(@a = (1,2));	# OP_AASSIGN
1009local($$x);		# OP_RV2SV		ok
1010local($#a);		# OP_AV2ARYLEN
1011local($x =   1);	# OP_SASSIGN
1012local($x &&= 1);	# OP_ANDASSIGN
1013local($x ||= 1);	# OP_ORASSIGN
1014local($x //= 1);	# OP_DORASSIGN
1015local($a[0]);		# OP_AELEMFAST		ok
1016
1017local(substr($x,0,1));	# OP_SUBSTR
1018local(pos($x));		# OP_POS
1019local(vec($x,0,1));	# OP_VEC
1020local($a[$b]);		# OP_AELEM		ok
1021local($a{$b});		# OP_HELEM		ok
1022local($[);		# OP_CONST
1023
1024no warnings 'syntax';
1025EXPECT
1026Useless localization of subroutine entry at - line 10.
1027Useless localization of exponentiation (**) at - line 11.
1028Useless localization of multiplication (*) at - line 12.
1029Useless localization of division (/) at - line 13.
1030Useless localization of modulus (%) at - line 14.
1031Useless localization of repeat (x) at - line 15.
1032Useless localization of addition (+) at - line 16.
1033Useless localization of subtraction (-) at - line 17.
1034Useless localization of concatenation (.) or string at - line 18.
1035Useless localization of left bitshift (<<) at - line 19.
1036Useless localization of right bitshift (>>) at - line 20.
1037Useless localization of bitwise and (&) at - line 21.
1038Useless localization of bitwise xor (^) at - line 22.
1039Useless localization of bitwise or (|) at - line 23.
1040Useless localization of integer multiplication (*) at - line 26.
1041Useless localization of integer division (/) at - line 27.
1042Useless localization of integer modulus (%) at - line 28.
1043Useless localization of integer addition (+) at - line 29.
1044Useless localization of integer subtraction (-) at - line 30.
1045Useless localization of list assignment at - line 39.
1046Useless localization of array length at - line 41.
1047Useless localization of scalar assignment at - line 42.
1048Useless localization of logical and assignment (&&=) at - line 43.
1049Useless localization of logical or assignment (||=) at - line 44.
1050Useless localization of defined or assignment (//=) at - line 45.
1051Useless localization of substr at - line 48.
1052Useless localization of match position at - line 49.
1053Useless localization of vec at - line 50.
1054########
1055# op.c
1056use warnings 'deprecated';
1057my $x1 if 0;
1058my @x2 if 0;
1059my %x3 if 0;
1060my ($x4) if 0;
1061my ($x5,@x6, %x7) if 0;
10620 && my $z1;
10630 && my (%z2);
1064# these shouldn't warn
1065our $x if 0;
1066our $x unless 0;
1067if (0) { my $w1 }
1068if (my $w2) { $a=1 }
1069if ($a && (my $w3 = 1)) {$a = 2}
1070
1071EXPECT
1072Deprecated use of my() in false conditional at - line 3.
1073Deprecated use of my() in false conditional at - line 4.
1074Deprecated use of my() in false conditional at - line 5.
1075Deprecated use of my() in false conditional at - line 6.
1076Deprecated use of my() in false conditional at - line 7.
1077Deprecated use of my() in false conditional at - line 8.
1078Deprecated use of my() in false conditional at - line 9.
1079