package Tie::StdHandle; 

use Tie::Handle;
our @ISA = 'Tie::Handle';
use Carp;

sub TIEHANDLE 
{
 my $class = shift;
 my $fh    = \do { local *HANDLE};
 bless $fh,$class;
 $fh->OPEN(@_) if (@_);
 return $fh;
}

sub EOF     { eof(@_[0]) }
sub TELL    { tell(@_[0]) }
sub FILENO  { fileno(@_[0]) }
sub SEEK    { seek(@_[0],@_[1],@_[2]) }
sub CLOSE   { close(@_[0]) }
sub BINMODE { binmode(@_[0]) }

sub OPEN
{
 @_[0]->CLOSE if defined(@_[0]->FILENO);
 @_ == 2 ? open(@_[0], @_[1]) : open(@_[0], @_[1], @_[2]);
}

sub READ     { read(@_[0],@_[1],@_[2]) }
sub READLINE { my $fh = @_[0]; ~< $fh }
sub GETC     { getc(@_[0]) }

sub WRITE
{
 my $fh = @_[0];
 print $fh substr(@_[1],0,@_[2])
}


1;
