16fb12b70Safresh1#!./perl 26fb12b70Safresh1 36fb12b70Safresh1use strict; 4*b8851fccSafresh1use warnings; 56fb12b70Safresh1 66fb12b70Safresh1use Test::More tests => 21; 76fb12b70Safresh1use Scalar::Util qw(openhandle); 86fb12b70Safresh1 96fb12b70Safresh1ok(defined &openhandle, 'defined'); 106fb12b70Safresh1 116fb12b70Safresh1{ 126fb12b70Safresh1 my $fh = \*STDERR; 136fb12b70Safresh1 is(openhandle($fh), $fh, 'STDERR'); 146fb12b70Safresh1 156fb12b70Safresh1 is(fileno(openhandle(*STDERR)), fileno(STDERR), 'fileno(STDERR)'); 166fb12b70Safresh1} 176fb12b70Safresh1 186fb12b70Safresh1{ 196fb12b70Safresh1 use vars qw(*CLOSED); 206fb12b70Safresh1 is(openhandle(*CLOSED), undef, 'closed'); 216fb12b70Safresh1} 226fb12b70Safresh1 236fb12b70Safresh1SKIP: { 246fb12b70Safresh1 skip "3-arg open only on 5.6 or later", 1 if $]<5.006; 256fb12b70Safresh1 266fb12b70Safresh1 open my $fh, "<", $0; 276fb12b70Safresh1 skip "could not open $0 for reading: $!", 2 unless $fh; 286fb12b70Safresh1 is(openhandle($fh), $fh, "works with indirect filehandles"); 296fb12b70Safresh1 close($fh); 306fb12b70Safresh1 is(openhandle($fh), undef, "works with indirect filehandles"); 316fb12b70Safresh1} 326fb12b70Safresh1 336fb12b70Safresh1SKIP: { 346fb12b70Safresh1 skip "in-memory files only on 5.8 or later", 2 if $]<5.008; 356fb12b70Safresh1 366fb12b70Safresh1 open my $fh, "<", \"in-memory file"; 376fb12b70Safresh1 skip "could not open in-memory file: $!", 2 unless $fh; 386fb12b70Safresh1 is(openhandle($fh), $fh, "works with in-memory files"); 396fb12b70Safresh1 close($fh); 406fb12b70Safresh1 is(openhandle($fh), undef, "works with in-memory files"); 416fb12b70Safresh1} 426fb12b70Safresh1 436fb12b70Safresh1ok(openhandle(\*DATA), "works for \*DATA"); 446fb12b70Safresh1ok(openhandle(*DATA), "works for *DATA"); 456fb12b70Safresh1ok(openhandle(*DATA{IO}), "works for *DATA{IO}"); 466fb12b70Safresh1 476fb12b70Safresh1{ 486fb12b70Safresh1 require IO::Handle; 496fb12b70Safresh1 my $fh = IO::Handle->new_from_fd(fileno(*STDERR), 'w'); 506fb12b70Safresh1 skip "new_from_fd(fileno(*STDERR)) failed", 2 unless $fh; 516fb12b70Safresh1 ok(openhandle($fh), "works for IO::Handle objects"); 526fb12b70Safresh1 536fb12b70Safresh1 ok(!openhandle(IO::Handle->new), "unopened IO::Handle"); 546fb12b70Safresh1} 556fb12b70Safresh1 566fb12b70Safresh1{ 576fb12b70Safresh1 require IO::File; 586fb12b70Safresh1 my $fh = IO::File->new; 596fb12b70Safresh1 $fh->open("< $0") 606fb12b70Safresh1 or skip "could not open $0: $!", 3; 616fb12b70Safresh1 ok(openhandle($fh), "works for IO::File objects"); 626fb12b70Safresh1 close($fh); 636fb12b70Safresh1 ok(!openhandle($fh), "works for IO::File objects"); 646fb12b70Safresh1 656fb12b70Safresh1 ok(!openhandle(IO::File->new), "unopened IO::File" ); 666fb12b70Safresh1} 676fb12b70Safresh1 686fb12b70Safresh1SKIP: { 696fb12b70Safresh1 skip( "Tied handles only on 5.8 or later", 2) if $]<5.008; 706fb12b70Safresh1 716fb12b70Safresh1 use vars qw(*H); 726fb12b70Safresh1 736fb12b70Safresh1 package My::Tie; 746fb12b70Safresh1 require Tie::Handle; 756fb12b70Safresh1 @My::Tie::ISA = qw(Tie::Handle); 766fb12b70Safresh1 sub TIEHANDLE { bless {} } 776fb12b70Safresh1 786fb12b70Safresh1 package main; 796fb12b70Safresh1 tie *H, 'My::Tie'; 806fb12b70Safresh1 ok(openhandle(*H), "tied handles are always ok"); 816fb12b70Safresh1 ok(openhandle(\*H), "tied handle refs are always ok"); 826fb12b70Safresh1} 836fb12b70Safresh1 846fb12b70Safresh1ok !openhandle(undef), "undef is not a filehandle"; 856fb12b70Safresh1ok !openhandle("STDIN"), "strings are not filehandles"; 866fb12b70Safresh1ok !openhandle(0), "integers are not filehandles"; 876fb12b70Safresh1 886fb12b70Safresh1 896fb12b70Safresh1__DATA__ 90