package FileHandle;
-use 5.003_11;
+use 5.005_64;
use strict;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
+our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
$VERSION = "2.00";
#
{
no strict 'refs';
- for my $f (qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets eof
- setbuf setvbuf _open_mode_string)) {
- *{$f} = \&{"IO::Handle::$f"} or die "$f missing";
- }
- for my $f (qw(seek tell fgetpos fsetpos fflush ferror clearerr)) {
- *{$f} = \&{"IO::Seekable::$f"} or die "$f missing";
- }
- for my $f (qw(new new_tmpfile open)) {
- *{$f} = \&{"IO::File::$f"} or die "$f missing";
+
+ my %import = (
+ 'IO::Handle' =>
+ [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
+ eof flush error clearerr setbuf setvbuf _open_mode_string)],
+ 'IO::Seekable' =>
+ [qw(seek tell getpos setpos)],
+ 'IO::File' =>
+ [qw(new new_tmpfile open)]
+ );
+ for my $pkg (keys %import) {
+ for my $func (@{$import{$pkg}}) {
+ my $c = *{"${pkg}::$func"}{CODE}
+ or die "${pkg}::$func missing";
+ *$func = $c;
+ }
}
}
sub import {
my $pkg = shift;
my $callpkg = caller;
- Exporter::export $pkg, $callpkg, @_;
+ require Exporter;
+ Exporter::export($pkg, $callpkg, @_);
#
# If the Fcntl extension is available,
#
eval {
require Fcntl;
- Exporter::export 'Fcntl', $callpkg;
+ Exporter::export('Fcntl', $callpkg);
};
}
($r, $w);
}
+# Rebless standard file handles
+bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
+bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
+bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
+
1;
__END__
use FileHandle;
$fh = new FileHandle;
- if ($fh->open "< file") {
+ if ($fh->open("< file")) {
print <$fh>;
$fh->close;
}
}
$pos = $fh->getpos;
- $fh->setpos $pos;
+ $fh->setpos($pos);
$fh->setvbuf($buffer_var, _IOLBF, 1024);
See L<perlfunc> for complete descriptions of each of the following
supported C<FileHandle> methods, which are just front ends for the
corresponding built-in functions:
-
+
close
fileno
getc
=item $fh->getline
This works like <$fh> described in L<perlop/"I/O Operators">
-except that it's more readable and can be safely called in an
-array context but still returns just one line.
+except that it's more readable and can be safely called in a
+list context but still returns just one line.
=item $fh->getlines
-This works like <$fh> when called in an array context to
+This works like <$fh> when called in a list context to
read all the remaining lines in a file, except that it's more readable.
It will also croak() if accidentally called in a scalar context.
=back
+There are many other functions available since FileHandle is descended
+from IO::File, IO::Seekable, and IO::Handle. Please see those
+respective pages for documentation on more functions.
+
=head1 SEE ALSO
The B<IO> extension,