1850e2753Smillertpackage Tie::StdHandle; 2850e2753Smillert 343003dfeSmillertuse strict; 443003dfeSmillert 5850e2753Smillertuse Tie::Handle; 65759b3d2Safresh1our @ISA = 'Tie::Handle'; 7*de8cc8edSafresh1our $VERSION = '4.6'; 843003dfeSmillert 943003dfeSmillert=head1 NAME 1043003dfeSmillert 1143003dfeSmillertTie::StdHandle - base class definitions for tied handles 1243003dfeSmillert 1343003dfeSmillert=head1 SYNOPSIS 1443003dfeSmillert 1543003dfeSmillert package NewHandle; 1643003dfeSmillert require Tie::Handle; 1743003dfeSmillert 1843003dfeSmillert @ISA = qw(Tie::Handle); 1943003dfeSmillert 2043003dfeSmillert sub READ { ... } # Provide a needed method 2143003dfeSmillert sub TIEHANDLE { ... } # Overrides inherited method 2243003dfeSmillert 2343003dfeSmillert 2443003dfeSmillert package main; 2543003dfeSmillert 2643003dfeSmillert tie *FH, 'NewHandle'; 2743003dfeSmillert 2843003dfeSmillert=head1 DESCRIPTION 2943003dfeSmillert 3043003dfeSmillertThe B<Tie::StdHandle> package provide most methods for file handles described 3143003dfeSmillertin L<perltie> (the exceptions are C<UNTIE> and C<DESTROY>). It causes tied 3243003dfeSmillertfile handles to behave exactly like standard file handles and allow for 3343003dfeSmillertselective overwriting of methods. 3443003dfeSmillert 3543003dfeSmillert=cut 36850e2753Smillert 37850e2753Smillertsub TIEHANDLE 38850e2753Smillert{ 39850e2753Smillert my $class = shift; 40850e2753Smillert my $fh = \do { local *HANDLE}; 41850e2753Smillert bless $fh,$class; 42850e2753Smillert $fh->OPEN(@_) if (@_); 43850e2753Smillert return $fh; 44850e2753Smillert} 45850e2753Smillert 46850e2753Smillertsub EOF { eof($_[0]) } 47850e2753Smillertsub TELL { tell($_[0]) } 48850e2753Smillertsub FILENO { fileno($_[0]) } 49850e2753Smillertsub SEEK { seek($_[0],$_[1],$_[2]) } 50850e2753Smillertsub CLOSE { close($_[0]) } 51*de8cc8edSafresh1sub BINMODE { &CORE::binmode(shift, @_) } 52850e2753Smillert 53850e2753Smillertsub OPEN 54850e2753Smillert{ 55850e2753Smillert $_[0]->CLOSE if defined($_[0]->FILENO); 56850e2753Smillert @_ == 2 ? open($_[0], $_[1]) : open($_[0], $_[1], $_[2]); 57850e2753Smillert} 58850e2753Smillert 5991f110e0Safresh1sub READ { &CORE::read(shift, \shift, @_) } 60850e2753Smillertsub READLINE { my $fh = $_[0]; <$fh> } 61850e2753Smillertsub GETC { getc($_[0]) } 62850e2753Smillert 63850e2753Smillertsub WRITE 64850e2753Smillert{ 65850e2753Smillert my $fh = $_[0]; 666fb12b70Safresh1 local $\; # don't print any line terminator 676fb12b70Safresh1 print $fh substr($_[1], $_[3], $_[2]); 68850e2753Smillert} 69850e2753Smillert 70850e2753Smillert 71850e2753Smillert1; 72