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