X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FIO%2Flib%2FIO%2FHandle.pm;h=e02f6dfe5d898f20f7a865c0cdaf9a0363accb6e;hb=f86702ccfcc3646d7aa30b09ce4f4413be9f99d1;hp=e4abdd2ecba3c633cf508d536176b9a18160d845;hpb=515e7bd7b61ce9581ca597e2697aa243300f4a60;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/IO/lib/IO/Handle.pm b/ext/IO/lib/IO/Handle.pm index e4abdd2..e02f6df 100644 --- a/ext/IO/lib/IO/Handle.pm +++ b/ext/IO/lib/IO/Handle.pm @@ -1,4 +1,3 @@ -# package IO::Handle; @@ -11,39 +10,33 @@ IO::Handle - supply object methods for I/O handles use IO::Handle; $fh = new IO::Handle; - if ($fh->open "< file") { - print <$fh>; - $fh->close; - } - - $fh = new IO::Handle "> FOO"; - if (defined $fh) { - print $fh "bar\n"; + if ($fh->fdopen(fileno(STDIN),"r")) { + print $fh->getline; $fh->close; } - $fh = new IO::Handle "file", "r"; - if (defined $fh) { - print <$fh>; - undef $fh; # automatically closes the file - } - - $fh = new IO::Handle "file", O_WRONLY|O_APPEND; - if (defined $fh) { - print $fh "corge\n"; - undef $fh; # automatically closes the file + $fh = new IO::Handle; + if ($fh->fdopen(fileno(STDOUT),"w")) { + $fh->print("Some text\n"); } - $pos = $fh->getpos; - $fh->setpos $pos; - $fh->setvbuf($buffer_var, _IOLBF, 1024); + undef $fh; # automatically closes the file if it's open + autoflush STDOUT 1; =head1 DESCRIPTION -C is the base class for all other IO handle classes. +C is the base class for all other IO handle classes. It is +not intended that objects of C would be created directly, +but instead C is inherited from by several other classes +in the IO hierarchy. + +If you are reading this documentation, looking for a replacement for +the C package, then I suggest you read the documentation +for C + A C object is a reference to a symbol (see the C package) =head1 CONSTRUCTOR @@ -78,11 +71,10 @@ result! See L for complete descriptions of each of the following supported C methods, which are just front ends for the corresponding built-in functions: - + close fileno getc - gets eof read truncate @@ -169,7 +161,7 @@ module keeps a C variable in 'io_socket_timeout'. L, L, -L +L =head1 BUGS @@ -185,7 +177,8 @@ Derived from FileHandle.pm by Graham Barr EFE =cut require 5.000; -use vars qw($RCS $VERSION @EXPORT_OK $AUTOLOAD); +use strict; +use vars qw($VERSION $XS_VERSION @EXPORT_OK $AUTOLOAD @ISA); use Carp; use Symbol; use SelectSaver; @@ -193,13 +186,8 @@ use SelectSaver; require Exporter; @ISA = qw(Exporter); -## -## TEMPORARY workaround as perl expects handles to be objects -## -@FileHandle::ISA = qw(IO::Handle); - -$VERSION = "1.12"; -$RCS = sprintf("%s", q$Revision: 1.15 $ =~ /([\d\.]+)/); +$VERSION = "1.1502"; +$XS_VERSION = "1.15"; @EXPORT_OK = qw( autoflush @@ -238,7 +226,7 @@ $RCS = sprintf("%s", q$Revision: 1.15 $ =~ /([\d\.]+)/); require DynaLoader; @IO::ISA = qw(DynaLoader); -bootstrap IO $VERSION; +bootstrap IO $XS_VERSION; sub AUTOLOAD { if ($AUTOLOAD =~ /::(_?[a-z])/) { @@ -249,6 +237,7 @@ sub AUTOLOAD { $constname =~ s/.*:://; my $val = constant($constname); defined $val or croak "$constname is not a valid IO::Handle macro"; + no strict 'refs'; *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } @@ -269,29 +258,20 @@ sub new_from_fd { my $class = ref($_[0]) || $_[0] || "IO::Handle"; @_ == 3 or croak "usage: new_from_fd $class FD, MODE"; my $fh = gensym; + shift; IO::Handle::fdopen($fh, @_) or return undef; bless $fh, $class; } -sub DESTROY { - my ($fh) = @_; +# +# There is no need for DESTROY to do anything, because when the +# last reference to an IO object is gone, Perl automatically +# closes its associated files (if any). However, to avoid any +# attempts to autoload DESTROY, we here define it to do nothing. +# +sub DESTROY {} - # During global object destruction, this function may be called - # on FILEHANDLEs as well as on the GLOBs that contains them. - # Thus the following trickery. If only the CORE file operators - # could deal with FILEHANDLEs, it wouldn't be necessary... - - if ($fh =~ /=FILEHANDLE\(/) { - local *TMP = $fh; - close(TMP) - if defined fileno(TMP); - } - else { - close($fh) - if defined fileno($fh); - } -} ################################################ ## Open and close. @@ -329,14 +309,8 @@ sub fdopen { sub close { @_ == 1 or croak 'usage: $fh->close()'; my($fh) = @_; - my $r = close($fh); - - # This may seem as though it should be in IO::Pipe, but the - # object gets blessed out of IO::Pipe when reader/writer is called - waitpid(${*$fh}{'io_pipe_pid'},0) - if(defined ${*$fh}{'io_pipe_pid'}); - $r; + close($fh); } ################################################ @@ -361,12 +335,6 @@ sub getc { getc($_[0]); } -sub gets { - @_ == 1 or croak 'usage: $fh->gets()'; - my ($handle) = @_; - scalar <$handle>; -} - sub eof { @_ == 1 or croak 'usage: $fh->eof()'; eof($_[0]); @@ -390,6 +358,8 @@ sub getline { return scalar <$this>; } +*gets = \&getline; # deprecated + sub getlines { @_ == 1 or croak 'usage: $fh->getline()'; wantarray or @@ -421,7 +391,7 @@ sub write { sub syswrite { @_ == 3 || @_ == 4 or croak '$fh->syswrite(BUF, LEN [, OFFSET])'; - sysread($_[0], $_[1], $_[2], $_[3] || 0); + syswrite($_[0], $_[1], $_[2], $_[3] || 0); } sub stat {