X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FIO%2Flib%2FIO%2FFile.pm;h=9c4177a6a1e0bab47db93f6055dc1a696c7d6305;hb=f21dc558ba1787c481c41d0e2a712ea60b9b1444;hp=9b3025f36d5e7e506eddc1550611d22a54ee12f3;hpb=55497cffdd24c959994f9a8ddd56db8ce85e1c5b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/IO/lib/IO/File.pm b/ext/IO/lib/IO/File.pm index 9b3025f..9c4177a 100644 --- a/ext/IO/lib/IO/File.pm +++ b/ext/IO/lib/IO/File.pm @@ -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,13 +31,12 @@ 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; @@ -50,12 +49,20 @@ these classes with methods that are specific to file handles. =over 4 -=item new ([ ARGS ] ) +=item new ( FILENAME [,MODE [,PERMS]] ) -Creates a C. If it receives any parameters, they are passed to +Creates an C. If it receives any parameters, they are passed to the method C; if the open fails, the object is destroyed. Otherwise, it is returned to the caller. +=item new_tmpfile + +Creates an C 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 object is destroyed. +Otherwise, it is returned to the caller. + =back =head1 METHODS @@ -65,20 +72,21 @@ it is returned to the caller. =item open( FILENAME [,MODE [,PERMS]] ) C accepts one, two or three parameters. With one parameter, -it is just a front end for the built-in C function. With two +it is just a front end for the built-in C 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 receives a Perl mode string ("E", "+E", etc.) -or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic -Perl C operator. +or an ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic +Perl C operator (but protects any special characters). If C is given a numeric mode, it passes that mode and the optional permissions value to the Perl C operator. -For convenience, C 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 exports the O_XXX constants from the +Fcntl module, if this module is available. =back @@ -91,48 +99,35 @@ L =head1 HISTORY -Derived from FileHandle.pm by Graham Barr EFE. - -=head1 REVISION - -$Revision: 1.5 $ +Derived from FileHandle.pm by Graham Barr EFE. =cut -require 5.000; -use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD); +use 5.006_001; +use strict; +our($VERSION, @EXPORT, @EXPORT_OK, @ISA); use Carp; use Symbol; -use English; use SelectSaver; -use IO::Handle qw(_open_mode_string); use IO::Seekable; +use File::Spec; require Exporter; -require DynaLoader; -@ISA = qw(IO::Handle IO::Seekable Exporter DynaLoader); +@ISA = qw(IO::Handle IO::Seekable Exporter); -$VERSION = sprintf("%d.%02d", q$Revision: 1.5 $ =~ /(\d+)\.(\d+)/); +$VERSION = "1.09"; @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 ## @@ -163,8 +158,12 @@ 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"; + if (defined($file) && length($file) + && ! File::Spec->file_name_is_absolute($file)) + { + $file = File::Spec->catfile(File::Spec->curdir(),$file); + } + $file = IO::Handle::_open_mode_string($mode) . " $file\0"; } open($fh, $file); }