add IO-1.20; mess with t/lib/io_*.t in an attempt to
[p5sagit/p5-mst-13.2.git] / ext / IO / lib / IO / File.pm
index 49439a5..fa7e804 100644 (file)
@@ -11,12 +11,12 @@ IO::File - supply object methods for filehandles
     use IO::File;
 
     $fh = new IO::File;
-    if ($fh->open "< file") {
+    if ($fh->open("< file")) {
         print <$fh>;
         $fh->close;
     }
 
-    $fh = new IO::File "> FOO";
+    $fh = new IO::File "> file";
     if (defined $fh) {
         print $fh "bar\n";
         $fh->close;
@@ -31,64 +31,84 @@ IO::File - supply object methods for filehandles
     $fh = new IO::File "file", O_WRONLY|O_APPEND;
     if (defined $fh) {
         print $fh "corge\n";
-        undef $fh;       # automatically closes the file
-    }
 
-    $pos = $fh->getpos;
-    $fh->setpos $pos;
+        $pos = $fh->getpos;
+        $fh->setpos($pos);
 
-    $fh->setvbuf($buffer_var, _IOLBF, 1024);
+        undef $fh;       # automatically closes the file
+    }
 
     autoflush STDOUT 1;
 
 =head1 DESCRIPTION
 
-C<IO::File::new> creates a C<IO::File>, which is a reference to a
-newly created symbol (see the C<Symbol> package).  If it receives any
-parameters, they are passed to C<IO::File::open>; if the open fails,
-the C<IO::File> object is destroyed.  Otherwise, it is returned to
-the caller.
+C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
+these classes with methods that are specific to file handles.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( FILENAME [,MODE [,PERMS]] )
+
+Creates a C<IO::File>.  If it receives any parameters, they are passed to
+the method C<open>; if the open fails, the object is destroyed.  Otherwise,
+it is returned to the caller.
+
+=item new_tmpfile
+
+Creates an C<IO::File> opened for read/write on a newly created temporary
+file.  On systems where this is possible, the temporary file is anonymous
+(i.e. it is unlinked after creation, but held open).  If the temporary
+file cannot be created or opened, the C<IO::File> object is destroyed.
+Otherwise, it is returned to the caller.
+
+=back
 
-C<IO::File::open> accepts one parameter or two.  With one parameter,
-it is just a front end for the built-in C<open> function.  With two
+=head1 METHODS
+
+=over 4
+
+=item open( FILENAME [,MODE [,PERMS]] )
+
+C<open> accepts one, two or three parameters.  With one parameter,
+it is just a front end for the built-in C<open> function.  With two or three
 parameters, the first parameter is a filename that may include
 whitespace or other special characters, and the second parameter is
 the open mode, optionally followed by a file permission value.
 
-If C<IO::File::open> receives a Perl mode string (">", "+<", etc.)
-or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic
-Perl C<open> operator.
+If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
+or a ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic
+Perl C<open> operator (but protects any special characters).
 
 If C<IO::File::open> is given a numeric mode, it passes that mode
 and the optional permissions value to the Perl C<sysopen> operator.
-For convenience, C<IO::File::import> tries to import the O_XXX
-constants from the Fcntl module.  If dynamic loading is not available,
-this may fail, but the rest of IO::File will still work.
+The permissions default to 0666.
+
+For convenience, C<IO::File> exports the O_XXX constants from the
+Fcntl module, if this module is available.
+
+=back
 
 =head1 SEE ALSO
 
 L<perlfunc>, 
 L<perlop/"I/O Operators">,
-L<"IO::Handle">
-L<"IO::Seekable">
+L<IO::Handle>
+L<IO::Seekable>
 
 =head1 HISTORY
 
-Derived from FileHandle.pm by Graham Barr <bodg@tiuk.ti.com>
-
-=head1 REVISION
-
-$Revision: 1.3 $
+Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>.
 
 =cut
 
 require 5.000;
-use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD);
+use strict;
+use vars qw($VERSION @EXPORT @EXPORT_OK @ISA);
 use Carp;
 use Symbol;
-use English;
 use SelectSaver;
-use IO::Handle qw(_open_mode_string);
 use IO::Seekable;
 
 require Exporter;
@@ -96,34 +116,27 @@ require DynaLoader;
 
 @ISA = qw(IO::Handle IO::Seekable Exporter DynaLoader);
 
-$VERSION = sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/);
+$VERSION = "1.08";
 
 @EXPORT = @IO::Seekable::EXPORT;
 
-################################################
-## If the Fcntl extension is available,
-##  export its constants.
-##
-
-sub import {
-    my $pkg = shift;
-    my $callpkg = caller;
-    Exporter::export $pkg, $callpkg;
-    eval {
-       require Fcntl;
-       Exporter::export 'Fcntl', $callpkg;
-    };
+eval {
+    # Make all Fcntl O_XXX constants available for importing
+    require Fcntl;
+    my @O = grep /^O_/, @Fcntl::EXPORT;
+    Fcntl->import(@O);  # first we import what we want to export
+    push(@EXPORT, @O);
 };
 
-
 ################################################
 ## Constructor
 ##
 
 sub new {
-    @_ >= 1 && @_ <= 4
-       or croak 'usage: new IO::File [FILENAME [,MODE [,PERMS]]]';
-    my $class = shift;
+    my $type = shift;
+    my $class = ref($type) || $type || "IO::File";
+    @_ >= 0 && @_ <= 3
+       or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]";
     my $fh = $class->SUPER::new();
     if (@_) {
        $fh->open(@_)
@@ -145,8 +158,8 @@ sub open {
            defined $perms or $perms = 0666;
            return sysopen($fh, $file, $mode, $perms);
        }
-        $file = "./" . $file unless $file =~ m#^/#;
-       $file = _open_mode_string($mode) . " $file\0";
+       $file = './' . $file if $file =~ m{\A[^\\/\w]};
+       $file = IO::Handle::_open_mode_string($mode) . " $file\0";
     }
     open($fh, $file);
 }