xref: /openbsd-src/gnu/usr.bin/perl/lib/Tie/StdHandle.pm (revision de8cc8edbc71bd3e3bc7fbffa27ba0e564c37d8b)
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