pp_hot.c
print() on unopened filehandle abc [pp_print]
$f = $a = "abc" ; print $f $a
Filehandle %s opened only for input [pp_print]
print STDIN "abc" ;
Filehandle %s opened only for output [pp_print]
$a = ~< $^STDOUT ;
print() on closed filehandle %s [pp_print]
close STDIN ; print STDIN "abc" ;
uninitialized [pp_rv2av]
my $a = undef ; my @b = @$a
uninitialized [pp_rv2hv]
my $a = undef ; my %b = %$a
Odd number of elements in hash list [pp_aassign]
%X = (1,2,3) ;
Filehandle %s opened only for output [Perl_do_readline]
open (FH, ">./xcv") ;
my $a = ~< *FH ;
glob failed (can't start child: %s) [Perl_do_readline] <<TODO
readline() on closed filehandle %s [Perl_do_readline]
close STDIN ; $a = ~< *STDIN;
readline() on closed filehandle %s [Perl_do_readline]
readline(NONESUCH);
glob failed (child exited with status %d%s) [Perl_do_readline] <<TODO
Deep recursion on subroutine \"%s\" [Perl_sub_crush_depth]
sub fred { fred() if $a++ +< 200} fred()
Deep recursion on anonymous subroutine [Perl_sub_crush_depth]
$a = sub { &$a if $a++ +< 200} &$a
Use of reference "%s" as array index [pp_aelem]
$x[\1]
__END__
# pp_hot.c [pp_print]
use warnings 'io' ;
# There is no guarantee that STDOUT is output only, or STDIN input only.
# Certainly on some BSDs (at least FreeBSD, Darwin, BSDi) file descriptors
# 1 and 2 are opened read/write on the tty, and the IO layers may reflect this.
# So we must make our own file handle that is read only.
my $file = "./xcv" ; unlink $file ;
open (my $fh, ">", "$file") or die $^OS_ERROR ;
close $fh or die $^OS_ERROR ;
die "There is no file $file" unless -f $file ;
open ($fh, "<", "$file") or die $^OS_ERROR ;
print $fh, "anc" ;
open(my $foo, "<&", $fh) or die $^OS_ERROR ;
print $foo, "anc" ;
no warnings 'io' ;
print $fh, "anc" ;
print $foo, "anc" ;
use warnings 'io' ;
print $fh, "anc" ;
print $foo, "anc" ;
close ($fh) or die $^OS_ERROR ;
close ($foo) or die $^OS_ERROR ;
unlink $file ;
EXPECT
Filehandle opened only for input at - line 12 character 1.
Filehandle opened only for input at - line 14 character 1.
Filehandle opened only for input at - line 19 character 1.
Filehandle opened only for input at - line 20 character 1.
########
# pp_hot.c [pp_print]
use warnings 'closed' ;
close $^STDIN ;
print $^STDIN, "anc";
opendir $^STDIN, ".";
print $^STDIN, "anc";
closedir $^STDIN;
no warnings 'closed' ;
print $^STDIN, "anc";
opendir $^STDIN, ".";
print $^STDIN, "anc";
use warnings;
no warnings 'closed' ;
print $^STDIN, "anc";
EXPECT
print() on closed filehandle STDIN at - line 4 character 1.
print() on closed filehandle STDIN at - line 6 character 1.
(Are you trying to call print() on dirhandle STDIN?)
at - line 6 character 1.
########
# pp_hot.c [pp_print]
# [ID 20020425.012] from Dave Steiner <steiner@bakerst.rutgers.edu>
# This goes segv on 5.7.3
use warnings 'closed' ;
my $fh = $^STDOUT;
close $^STDOUT or die "Can't close STDOUT";
print $fh, "Shouldn't print anything, but shouldn't SEGV either\n";
EXPECT
print() on closed filehandle STDOUT at - line 7 character 1.
########
# pp_hot.c [pp_print]
package foo;
use warnings 'closed';
open my $fh1, "<", "nonexistent";
print $fh1, 42;
open my $fh2, "<", "nonexistent";
print $fh2, 42;
open $bar::fh3, "<", "nonexistent";
print $bar::fh3, 42;
EXPECT
print() on closed filehandle at - line 5 character 1.
print() on closed filehandle at - line 7 character 1.
print() on closed filehandle at - line 9 character 1.
########
# pp_hot.c [Perl_do_readline]
use warnings 'closed' ;
close $^STDIN ; $a = ~< $^STDIN ;
opendir $^STDIN, "." ; $a = ~< $^STDIN ;
closedir $^STDIN;
no warnings 'closed' ;
opendir $^STDIN, "." ; $a = ~< $^STDIN ;
$a = ~< *STDIN ;
EXPECT
readline() on closed filehandle STDIN at - line 3 character 29.
readline() on closed filehandle STDIN at - line 4 character 29.
(Are you trying to call readline() on dirhandle STDIN?)
at - line 4 character 29.
########
# pp_hot.c [Perl_do_readline]
use warnings 'io' ;
my $file = "./xcv" ; unlink $file ;
open (my $fh, ">", "$file") or die $^OS_ERROR ;
my $a = ~< *$fh ;
no warnings 'io' ;
$a = ~< *$fh ;
use warnings 'io' ;
open(my $foo, ">&", $fh) or die $^OS_ERROR ;
$a = ~< *$foo ;
no warnings 'io' ;
$a = ~< *$foo ;
use warnings 'io' ;
$a = ~< *$foo ;
$a = ~< *$fh ;
close ($fh) or die $^OS_ERROR ;
close ($foo) or die $^OS_ERROR ;
unlink $file ;
EXPECT
Filehandle opened only for output at - line 5 character 9.
Filehandle opened only for output at - line 10 character 6.
Filehandle opened only for output at - line 14 character 6.
Filehandle opened only for output at - line 15 character 6.
########
# pp_hot.c [Perl_sub_crush_depth]
use warnings 'recursion' ;
sub fred
{
fred() if $a++ +< 200
}
do {
local $^WARN_HOOK = sub {
if (@_[0]->message =~ m/^Deep recursion on subroutine "main::fred"/) {
print $^STDOUT, "ok\n";
exit 0;
}
};
fred();
};
EXPECT
ok
########
# pp_hot.c [Perl_sub_crush_depth]
no warnings 'recursion' ;
sub fred
{
fred() if $a++ +< 200
}
do {
local $^WARN_HOOK = sub {
if (@_[0]->message =~ m/^Deep recursion on subroutine "main::fred"/) {
print $^STDOUT, "ok\n";
exit 0;
}
};
fred();
};
EXPECT
########
# pp_hot.c [Perl_sub_crush_depth]
use warnings 'recursion' ;
$b = sub
{
&$b() if $a++ +< 200
} ;
&$b() ;
EXPECT
Deep recursion on subroutine "main::__ANON__" at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 5 character 5.
main::__ANON__ called at - line 8 character 1.
########
# pp_hot.c [Perl_sub_crush_depth]
no warnings 'recursion' ;
$b = sub
{
&$b if $a++ +< 200
} ;
&$b ;
EXPECT
########
# pp_hot.c [pp_concat]
use warnings 'uninitialized';
my($x, $y);
sub a { shift }
a($x . "x"); # should warn once
a($x . $y); # should warn twice
$x .= $y; # should warn once
$y .= $y; # should warn once
EXPECT
Use of uninitialized value $x in concatenation (.) or string at - line 5 character 6.
Use of uninitialized value $x in concatenation (.) or string at - line 6 character 6.
Use of uninitialized value $y in concatenation (.) or string at - line 6 character 6.
Use of uninitialized value $y in concatenation (.) or string at - line 7 character 4.
Use of uninitialized value $y in concatenation (.) or string at - line 8 character 4.
########