The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
  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.
########