xref: /openbsd-src/gnu/usr.bin/perl/t/lib/warnings/pp_hot (revision 91f110e064cd7c194e59e019b83bb7496c1c84d4)
1  pp_hot.c
2
3  print() on unopened filehandle abc		[pp_print]
4    $f = $a = "abc" ; print $f $a
5
6  Filehandle %s opened only for input		[pp_print]
7    print STDIN "abc" ;
8
9  Filehandle %s opened only for output		[pp_print]
10    $a = <STDOUT> ;
11
12  print() on closed filehandle %s		[pp_print]
13    close STDIN ; print STDIN "abc" ;
14
15  uninitialized					[pp_rv2av]
16	my $a = undef ; my @b = @$a
17
18  uninitialized					[pp_rv2hv]
19	my $a = undef ; my %b = %$a
20
21  Odd number of elements in hash list		[pp_aassign]
22	%X = (1,2,3) ;
23
24  Reference found where even-sized list expected [pp_aassign]
25	$X = [ 1 ..3 ];
26
27  Filehandle %s opened only for output		[Perl_do_readline]
28  	open (FH, ">./xcv") ;
29	my $a = <FH> ;
30
31  glob failed (can't start child: %s)		[Perl_do_readline] <<TODO
32
33  readline() on closed filehandle %s		[Perl_do_readline]
34    close STDIN ; $a = <STDIN>;
35
36  readline() on closed filehandle %s		[Perl_do_readline]
37    readline(NONESUCH);
38
39  glob failed (child exited with status %d%s)	[Perl_do_readline] <<TODO
40
41  Deep recursion on subroutine \"%s\"		[Perl_sub_crush_depth]
42    sub fred { fred() if $a++ < 200} fred()
43
44  Deep recursion on anonymous subroutine 	[Perl_sub_crush_depth]
45    $a = sub { &$a if $a++ < 200} &$a
46
47  Use of reference "%s" as array index [pp_aelem]
48    $x[\1]
49
50__END__
51# pp_hot.c [pp_print]
52use warnings 'unopened' ;
53$f = $a = "abc" ;
54print $f $a;
55no warnings 'unopened' ;
56print $f $a;
57use warnings;
58no warnings 'unopened' ;
59print $f $a;
60EXPECT
61print() on unopened filehandle abc at - line 4.
62########
63# pp_hot.c [pp_print]
64use warnings 'unopened' ;
65$SIG{__WARN__} = sub { warn $_[0] =~ s/\0/\\0/rug; };
66print {"a\0b"} "anc";
67print {"\0b"} "anc";
68EXPECT
69print() on unopened filehandle a\0b at - line 4.
70print() on unopened filehandle \0b at - line 5.
71########
72# pp_hot.c [pp_print]
73use warnings 'io' ;
74# There is no guarantee that STDOUT is output only, or STDIN input only.
75# Certainly on some BSDs (at least FreeBSD, Darwin, BSDi) file descriptors
76# 1 and 2 are opened read/write on the tty, and the IO layers may reflect this.
77# So we must make our own file handle that is read only.
78my $file = "./xcv" ; unlink $file ;
79open (FH, ">$file") or die $! ;
80close FH or die $! ;
81die "There is no file $file" unless -f $file ;
82open (FH, "<$file") or die $! ;
83print FH "anc" ;
84open(FOO, "<&FH") or die $! ;
85print FOO "anc" ;
86no warnings 'io' ;
87print FH "anc" ;
88print FOO "anc" ;
89use warnings 'io' ;
90print FH "anc" ;
91print FOO "anc" ;
92close (FH) or die $! ;
93close (FOO) or die $! ;
94unlink $file ;
95EXPECT
96Filehandle FH opened only for input at - line 12.
97Filehandle FOO opened only for input at - line 14.
98Filehandle FH opened only for input at - line 19.
99Filehandle FOO opened only for input at - line 20.
100########
101# pp_hot.c [pp_print]
102$SIG{__WARN__} = sub { warn $_[0] =~ s/\0/\\0/rug; };
103use warnings 'io' ;
104my $file = "./xcv" ; unlink $file ;
105open (FH, ">$file") or die $! ;
106close FH or die $! ;
107die "There is no file $file" unless -f $file ;
108open ("a\0b", "<$file") or die $! ;
109print {"a\0b"} "anc" ;
110open ("\0b", "<$file") or die $! ;
111print {"\0b"} "anc" ;
112close "a\0b" or die $! ;
113close "\0b" or die $! ;
114unlink $file ;
115EXPECT
116Filehandle a\0b opened only for input at - line 9.
117Filehandle \0b opened only for input at - line 11.
118########
119# pp_hot.c [pp_print]
120use warnings 'closed' ;
121close STDIN ;
122print STDIN "anc";
123opendir STDIN, ".";
124print STDIN "anc";
125closedir STDIN;
126no warnings 'closed' ;
127print STDIN "anc";
128opendir STDIN, ".";
129print STDIN "anc";
130use warnings;
131no warnings 'closed' ;
132print STDIN "anc";
133EXPECT
134print() on closed filehandle STDIN at - line 4.
135print() on closed filehandle STDIN at - line 6.
136	(Are you trying to call print() on dirhandle STDIN?)
137########
138# pp_hot.c [pp_print]
139# [ID 20020425.012] from Dave Steiner <steiner@bakerst.rutgers.edu>
140# This goes segv on 5.7.3
141use warnings 'closed' ;
142my $fh = *STDOUT{IO};
143close STDOUT or die "Can't close STDOUT";
144print $fh "Shouldn't print anything, but shouldn't SEGV either\n";
145EXPECT
146print() on closed filehandle __ANONIO__ at - line 7.
147########
148# pp_hot.c [pp_print]
149package foo;
150use warnings 'closed';
151open my $fh1, "nonexistent";
152print $fh1 42;
153open $fh2, "nonexistent";
154print $fh2 42;
155open $bar::fh3, "nonexistent";
156print $bar::fh3 42;
157open bar::FH4, "nonexistent";
158print bar::FH4 42;
159EXPECT
160print() on closed filehandle $fh1 at - line 5.
161print() on closed filehandle $fh2 at - line 7.
162print() on closed filehandle $fh3 at - line 9.
163print() on closed filehandle FH4 at - line 11.
164########
165# pp_hot.c [pp_rv2av]
166use warnings 'uninitialized' ;
167my $a = undef ;
168my @b = @$a;
169no warnings 'uninitialized' ;
170my @c = @$a;
171EXPECT
172Use of uninitialized value $a in array dereference at - line 4.
173########
174# pp_hot.c [pp_rv2hv]
175use warnings 'uninitialized' ;
176my $a = undef ;
177my %b = %$a;
178no warnings 'uninitialized' ;
179my %c = %$a;
180EXPECT
181Use of uninitialized value $a in hash dereference at - line 4.
182########
183# pp_hot.c [pp_aassign]
184use warnings 'misc' ;
185my %X ; %X = (1,2,3) ;
186no warnings 'misc' ;
187my %Y ; %Y = (1,2,3) ;
188EXPECT
189Odd number of elements in hash assignment at - line 3.
190########
191# pp_hot.c [pp_aassign]
192use warnings 'misc' ;
193my %X ; %X = [1 .. 3] ;
194no warnings 'misc' ;
195my %Y ; %Y = [1 .. 3] ;
196EXPECT
197Reference found where even-sized list expected at - line 3.
198########
199# pp_hot.c [Perl_do_readline]
200use warnings 'closed' ;
201close STDIN        ; $a = <STDIN> ;
202opendir STDIN, "." ; $a = <STDIN> ;
203closedir STDIN;
204no warnings 'closed' ;
205opendir STDIN, "." ; $a = <STDIN> ;
206$a = <STDIN> ;
207EXPECT
208readline() on closed filehandle STDIN at - line 3.
209readline() on closed filehandle STDIN at - line 4.
210	(Are you trying to call readline() on dirhandle STDIN?)
211########
212# pp_hot.c [Perl_do_readline]
213use warnings 'io' ;
214my $file = "./xcv" ; unlink $file ;
215open (FH, ">$file") or die $! ;
216my $a = <FH> ;
217no warnings 'io' ;
218$a = <FH> ;
219use warnings 'io' ;
220open(FOO, ">&FH") or die $! ;
221$a = <FOO> ;
222no warnings 'io' ;
223$a = <FOO> ;
224use warnings 'io' ;
225$a = <FOO> ;
226$a = <FH> ;
227close (FH) or die $! ;
228close (FOO) or die $! ;
229unlink $file ;
230EXPECT
231Filehandle FH opened only for output at - line 5.
232Filehandle FOO opened only for output at - line 10.
233Filehandle FOO opened only for output at - line 14.
234Filehandle FH opened only for output at - line 15.
235########
236# pp_hot.c [Perl_sub_crush_depth]
237use warnings 'recursion' ;
238sub fred
239{
240    fred() if $a++ < 200
241}
242{
243  local $SIG{__WARN__} = sub {
244    die "ok\n" if $_[0] =~ /^Deep recursion on subroutine "main::fred"/
245  };
246  fred();
247}
248EXPECT
249ok
250########
251# pp_hot.c [Perl_sub_crush_depth]
252no warnings 'recursion' ;
253sub fred
254{
255    fred() if $a++ < 200
256}
257{
258  local $SIG{__WARN__} = sub {
259    die "ok\n" if $_[0] =~ /^Deep recursion on subroutine "main::fred"/
260  };
261  fred();
262}
263EXPECT
264
265########
266# pp_hot.c [Perl_sub_crush_depth]
267use warnings 'recursion' ;
268$b = sub
269{
270    &$b if $a++ < 200
271}  ;
272
273&$b ;
274EXPECT
275Deep recursion on anonymous subroutine at - line 5.
276########
277# pp_hot.c [Perl_sub_crush_depth]
278no warnings 'recursion' ;
279$b = sub
280{
281    &$b if $a++ < 200
282}  ;
283
284&$b ;
285EXPECT
286########
287# pp_hot.c [pp_concat]
288use warnings 'uninitialized';
289my($x, $y);
290sub a { shift }
291a($x . "x");	# should warn once
292a($x . $y);	# should warn twice
293$x .= $y;	# should warn once
294$y .= $y;	# should warn once
295EXPECT
296Use of uninitialized value $x in concatenation (.) or string at - line 5.
297Use of uninitialized value $x in concatenation (.) or string at - line 6.
298Use of uninitialized value $y in concatenation (.) or string at - line 6.
299Use of uninitialized value $y in concatenation (.) or string at - line 7.
300Use of uninitialized value $y in concatenation (.) or string at - line 8.
301########
302# pp_hot.c [pp_aelem]
303{
304use warnings 'misc';
305print $x[\1];
306}
307{
308no warnings 'misc';
309print $x[\1];
310}
311
312EXPECT
313OPTION regex
314Use of reference ".*" as array index at - line 4.
315########
316# pp_hot.c [pp_aelem]
317package Foo;use overload q("") => sub {};package main;$a = bless {}, "Foo";
318$b = {};
319{
320use warnings 'misc';
321print $x[$a];
322print $x[$b];
323}
324{
325no warnings 'misc';
326print $x[$a];
327print $x[$b];
328}
329
330EXPECT
331OPTION regex
332Use of reference ".*" as array index at - line 7.
333