Document IO::File::new_tmpfile
[p5sagit/p5-mst-13.2.git] / ext / IO / lib / IO / File.pm
CommitLineData
7a4c00b4 1#
2
8add82fc 3package IO::File;
4
5=head1 NAME
6
7IO::File - supply object methods for filehandles
8
9=head1 SYNOPSIS
10
11 use IO::File;
12
13 $fh = new IO::File;
774d564b 14 if ($fh->open("< file")) {
8add82fc 15 print <$fh>;
16 $fh->close;
17 }
18
774d564b 19 $fh = new IO::File "> file";
8add82fc 20 if (defined $fh) {
21 print $fh "bar\n";
22 $fh->close;
23 }
24
25 $fh = new IO::File "file", "r";
26 if (defined $fh) {
27 print <$fh>;
28 undef $fh; # automatically closes the file
29 }
30
31 $fh = new IO::File "file", O_WRONLY|O_APPEND;
32 if (defined $fh) {
33 print $fh "corge\n";
8add82fc 34
774d564b 35 $pos = $fh->getpos;
36 $fh->setpos($pos);
8add82fc 37
774d564b 38 undef $fh; # automatically closes the file
39 }
8add82fc 40
41 autoflush STDOUT 1;
42
43=head1 DESCRIPTION
44
55497cff 45C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
27d4819a 46these classes with methods that are specific to file handles.
8add82fc 47
27d4819a 48=head1 CONSTRUCTOR
49
50=over 4
51
52=item new ([ ARGS ] )
53
54Creates a C<IO::File>. If it receives any parameters, they are passed to
55the method C<open>; if the open fails, the object is destroyed. Otherwise,
56it is returned to the caller.
57
9f01644e 58=item new_tmpfile
59
60Creates an C<IO::File> opened for read/write on a newly created temporary
61file. On systems where this is possible, the temporary file is anonymous
62(i.e. it is unlinked after creation, but held open). If the temporary
63file cannot be created or opened, the C<IO::File> object is destroyed.
64Otherwise, it is returned to the caller.
65
27d4819a 66=back
67
68=head1 METHODS
69
70=over 4
71
72=item open( FILENAME [,MODE [,PERMS]] )
73
74C<open> accepts one, two or three parameters. With one parameter,
8add82fc 75it is just a front end for the built-in C<open> function. With two
76parameters, the first parameter is a filename that may include
77whitespace or other special characters, and the second parameter is
223d223e 78the open mode, optionally followed by a file permission value.
79
27d4819a 80If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
223d223e 81or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic
82Perl C<open> operator.
83
84If C<IO::File::open> is given a numeric mode, it passes that mode
85and the optional permissions value to the Perl C<sysopen> operator.
86For convenience, C<IO::File::import> tries to import the O_XXX
87constants from the Fcntl module. If dynamic loading is not available,
88this may fail, but the rest of IO::File will still work.
8add82fc 89
27d4819a 90=back
91
8add82fc 92=head1 SEE ALSO
93
94L<perlfunc>,
95L<perlop/"I/O Operators">,
27d4819a 96L<IO::Handle>
97L<IO::Seekable>
8add82fc 98
99=head1 HISTORY
100
27d4819a 101Derived from FileHandle.pm by Graham Barr E<lt>F<bodg@tiuk.ti.com>E<gt>.
8add82fc 102
8add82fc 103=cut
104
105require 5.000;
7a4c00b4 106use strict;
107use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD @ISA);
8add82fc 108use Carp;
109use Symbol;
8add82fc 110use SelectSaver;
111use IO::Handle qw(_open_mode_string);
112use IO::Seekable;
113
114require Exporter;
115require DynaLoader;
116
117@ISA = qw(IO::Handle IO::Seekable Exporter DynaLoader);
118
7a4c00b4 119$VERSION = "1.06";
8add82fc 120
121@EXPORT = @IO::Seekable::EXPORT;
122
8add82fc 123sub import {
124 my $pkg = shift;
125 my $callpkg = caller;
1bea6b6d 126 Exporter::export $pkg, $callpkg, @_;
127
128 #
129 # If the Fcntl extension is available,
130 # export its constants for sysopen().
131 #
8add82fc 132 eval {
133 require Fcntl;
1bea6b6d 134 Exporter::export 'Fcntl', $callpkg, '/^O_/';
8add82fc 135 };
1bea6b6d 136}
8add82fc 137
138
139################################################
140## Constructor
141##
142
143sub new {
27d4819a 144 my $type = shift;
145 my $class = ref($type) || $type || "IO::File";
146 @_ >= 0 && @_ <= 3
147 or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]";
8add82fc 148 my $fh = $class->SUPER::new();
149 if (@_) {
150 $fh->open(@_)
151 or return undef;
152 }
153 $fh;
154}
155
156################################################
157## Open
158##
159
160sub open {
161 @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
162 my ($fh, $file) = @_;
163 if (@_ > 2) {
164 my ($mode, $perms) = @_[2, 3];
165 if ($mode =~ /^\d+$/) {
166 defined $perms or $perms = 0666;
167 return sysopen($fh, $file, $mode, $perms);
168 }
169 $file = "./" . $file unless $file =~ m#^/#;
170 $file = _open_mode_string($mode) . " $file\0";
171 }
172 open($fh, $file);
173}
174
1751;