The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

package main;

use strict;
use Test::More;

# We may see failures with package filehandles if Fatal/autodie
# incorrectly pulls out a cached subroutine from a different package.

# We're using Fatal because package filehandles are likely to
# see more use with Fatal than autodie.

use Fatal qw(open);

eval {
    open(FILE, '<', $0);
};


if ($@) {
    # Holy smokes!  We couldn't even open our own file, bail out...

    plan skip_all => q{Can't open $0 for filehandle tests}
}

plan tests => 4;

my $line = <FILE>;

like($line, qr{perl}, 'Looks like we opened $0 correctly');

close(FILE);

package autodie::test;
use Test::More;

use Fatal qw(open);

eval {
    open(FILE2, '<', $0);
};

is($@,"",'Opened $0 in autodie::test');

my $line2 = <FILE2>;

like($line2, qr{perl}, '...and we can read from $0 fine');

close(FILE2);

package main;

# This shouldn't read anything, because FILE2 should be inside
# autodie::test

no warnings;    # Otherwise we see problems with FILE2
my $wrong_line = <FILE2>;

ok(! defined($wrong_line),q{Filehandles shouldn't leak between packages});