use strict ; use warnings ; use IO::Handle ; use FileHandle ; use Scalar::Util qw(reftype) ; print "1________________________________\n", 'open FH, ">&2" ;', "\n" ; open FH, ">&2" ; show('*FH', *FH) ; show('\*FH', \*FH) ; show('*FH{IO}', *FH{IO}) ; print "\n", "2________________________________\n", 'open my $OUT, ">&2" ; ', "\n" ; open my $OUT, ">&2" ; show('$OUT', $OUT) ; show('*$OUT{IO}', *$OUT{IO}) ; print "\n", "3________________________________\n", 'my $ih = new IO::Handle ;', "\n" ; my $ih = new IO::Handle ; print 'reftype($ih) = ', reftype($ih), "\n" ; print 'open $ih, ">&2" ;', "\n" ; open $ih, ">&2" ; show('$ih', $ih) ; show('*$ih{IO}', *$ih{IO}) ; print "\n", "4________________________________\n", 'my $fh = new FileHandle ;', "\n" ; my $fh = new FileHandle ; print 'reftype($fh) = ', reftype($fh), "\n" ; print 'open $fh, ">&2" ;', "\n" ; open $fh, ">&2" ; show('$fh', $fh) ; show('*$fh{IO}', *$fh{IO}) ; sub show { my ($tag, $FH) = @_ ; my $can = $FH->can('autoflush') ? "can 'autoflush'" : "can NOT 'autoflush'" ; my $tst = defined(-t $FH) ? "OK" : 'undef' ; printf $FH " show%-12s => %-18s fileno=%d test=%-5s %s\n", "($tag)", sex($FH), fileno($FH), $tst, $can ; } ; sub sex { my ($thing) = @_ ; my $sex = ref($thing) ; return $sex ? "ref:$sex" : ref(\$thing) ; } ;