5 IO::Handle - supply object methods for I/O handles
12 if ($io->fdopen(fileno(STDIN),"r")) {
18 if ($io->fdopen(fileno(STDOUT),"w")) {
19 $io->print("Some text\n");
22 # setvbuf is not available by default on Perls 5.8.0 and later.
23 use IO::Handle '_IOLBF';
24 $io->setvbuf($buffer_var, _IOLBF, 1024);
26 undef $io; # automatically closes the file if it's open
32 C<IO::Handle> is the base class for all other IO handle classes. It is
33 not intended that objects of C<IO::Handle> would be created directly,
34 but instead C<IO::Handle> is inherited from by several other classes
37 If you are reading this documentation, looking for a replacement for
38 the C<FileHandle> package, then I suggest you read the documentation
47 Creates a new C<IO::Handle> object.
49 =item new_from_fd ( FD, MODE )
51 Creates an C<IO::Handle> like C<new> does.
52 It requires two parameters, which are passed to the method C<fdopen>;
53 if the fdopen fails, the object is destroyed. Otherwise, it is returned
60 See L<perlfunc> for complete descriptions of each of the following
61 supported C<IO::Handle> methods, which are just front ends for the
62 corresponding built-in functions:
67 $io->format_write( [FORMAT_NAME] )
69 $io->read ( BUF, LEN, [OFFSET] )
71 $io->printf ( FMT, [ARGS] )
74 $io->sysread ( BUF, LEN, [OFFSET] )
75 $io->syswrite ( BUF, [LEN, [OFFSET]] )
78 See L<perlvar> for complete descriptions of each of the following
79 supported C<IO::Handle> methods. All of them return the previous
80 value of the attribute and takes an optional single argument that when
81 given will set the value. If no argument is given the previous value
82 is unchanged (except for $io->autoflush will actually turn ON
83 autoflush by default).
85 $io->autoflush ( [BOOL] ) $|
86 $io->format_page_number( [NUM] ) $%
87 $io->format_lines_per_page( [NUM] ) $=
88 $io->format_lines_left( [NUM] ) $-
89 $io->format_name( [STR] ) $~
90 $io->format_top_name( [STR] ) $^
91 $io->input_line_number( [NUM]) $.
93 The following methods are not supported on a per-filehandle basis.
95 IO::Handle->format_line_break_characters( [STR] ) $:
96 IO::Handle->format_formfeed( [STR]) $^L
97 IO::Handle->output_field_separator( [STR] ) $,
98 IO::Handle->output_record_separator( [STR] ) $\
100 IO::Handle->input_record_separator( [STR] ) $/
102 Furthermore, for doing normal I/O you might need these:
106 =item $io->fdopen ( FD, MODE )
108 C<fdopen> is like an ordinary C<open> except that its first parameter
109 is not a filename but rather a file handle name, an IO::Handle object,
110 or a file descriptor number.
114 Returns true if the object is currently a valid file descriptor, false
119 This works like <$io> described in L<perlop/"I/O Operators">
120 except that it's more readable and can be safely called in a
121 list context but still returns just one line. If used as the conditional
122 +within a C<while> or C-style C<for> loop, however, you will need to
123 +emulate the functionality of <$io> with C<< defined($_ = $io->getline) >>.
127 This works like <$io> when called in a list context to read all
128 the remaining lines in a file, except that it's more readable.
129 It will also croak() if accidentally called in a scalar context.
131 =item $io->ungetc ( ORD )
133 Pushes a character with the given ordinal value back onto the given
134 handle's input stream. Only one character of pushback per handle is
137 =item $io->write ( BUF, LEN [, OFFSET ] )
139 This C<write> is like C<write> found in C, that is it is the
140 opposite of read. The wrapper for the perl C<write> function is
141 called C<format_write>.
145 Returns a true value if the given handle has experienced any errors
146 since it was opened or since the last call to C<clearerr>, or if the
147 handle is invalid. It only returns false for a valid handle with no
152 Clear the given handle's error indicator. Returns -1 if the handle is
153 invalid, 0 otherwise.
157 C<sync> synchronizes a file's in-memory state with that on the
158 physical medium. C<sync> does not operate at the perlio api level, but
159 operates on the file descriptor (similar to sysread, sysseek and
160 systell). This means that any data held at the perlio api level will not
161 be synchronized. To synchronize data that is buffered at the perlio api
162 level you must use the flush method. C<sync> is not implemented on all
163 platforms. Returns "0 but true" on success, C<undef> on error, C<undef>
164 for an invalid handle. See L<fsync(3c)>.
168 C<flush> causes perl to flush any buffered data at the perlio api level.
169 Any unread data in the buffer will be discarded, and any unwritten data
170 will be written to the underlying file descriptor. Returns "0 but true"
171 on success, C<undef> on error.
173 =item $io->printflush ( ARGS )
175 Turns on autoflush, print ARGS and then restores the autoflush status of the
176 C<IO::Handle> object. Returns the return value from print.
178 =item $io->blocking ( [ BOOL ] )
180 If called with an argument C<blocking> will turn on non-blocking IO if
181 C<BOOL> is false, and turn it off if C<BOOL> is true.
183 C<blocking> will return the value of the previous setting, or the
184 current setting if C<BOOL> is not given.
186 If an error occurs C<blocking> will return undef and C<$!> will be set.
191 If the C functions setbuf() and/or setvbuf() are available, then
192 C<IO::Handle::setbuf> and C<IO::Handle::setvbuf> set the buffering
193 policy for an IO::Handle. The calling sequences for the Perl functions
194 are the same as their C counterparts--including the constants C<_IOFBF>,
195 C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
196 specifies a scalar variable to use as a buffer. You should only
197 change the buffer before any I/O, or immediately after calling flush.
199 WARNING: The IO::Handle::setvbuf() is not available by default on
200 Perls 5.8.0 and later because setvbuf() is rather specific to using
201 the stdio library, while Perl prefers the new perlio subsystem instead.
203 WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
204 be modified> in any way until the IO::Handle is closed or C<setbuf> or
205 C<setvbuf> is called again, or memory corruption may result! Remember that
206 the order of global destruction is undefined, so even if your buffer
207 variable remains in scope until program termination, it may be undefined
208 before the file IO::Handle is closed. Note that you need to import the
209 constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
210 returns nothing. setvbuf returns "0 but true", on success, C<undef> on
213 Lastly, there is a special method for working under B<-T> and setuid/gid
220 Marks the object as taint-clean, and as such data read from it will also
221 be considered taint-clean. Note that this is a very trusting action to
222 take, and appropriate consideration for the data source and potential
223 vulnerability should be kept in mind. Returns 0 on success, -1 if setting
224 the taint-clean flag failed. (eg invalid handle)
230 An C<IO::Handle> object is a reference to a symbol/GLOB reference (see
231 the C<Symbol> package). Some modules that
232 inherit from C<IO::Handle> may want to keep object related variables
233 in the hash table part of the GLOB. In an attempt to prevent modules
234 trampling on each other I propose the that any such module should prefix
235 its variables with its own name separated by _'s. For example the IO::Socket
236 module keeps a C<timeout> variable in 'io_socket_timeout'.
241 L<perlop/"I/O Operators">,
246 Due to backwards compatibility, all filehandles resemble objects
247 of class C<IO::Handle>, or actually classes derived from that class.
248 They actually aren't. Which means you can't derive your own
249 class from C<IO::Handle> and inherit those methods.
253 Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
259 our($VERSION, @EXPORT_OK, @ISA);
263 use IO (); # Load the XS module
269 $VERSION = eval $VERSION;
273 output_field_separator
274 output_record_separator
275 input_record_separator
278 format_lines_per_page
282 format_line_break_characters
303 ################################################
304 ## Constructors, destructors.
308 my $class = ref($_[0]) || $_[0] || "IO::Handle";
309 @_ == 1 or croak "usage: new $class";
315 my $class = ref($_[0]) || $_[0] || "IO::Handle";
316 @_ == 3 or croak "usage: new_from_fd $class FD, MODE";
319 IO::Handle::fdopen($io, @_)
325 # There is no need for DESTROY to do anything, because when the
326 # last reference to an IO object is gone, Perl automatically
327 # closes its associated files (if any). However, to avoid any
328 # attempts to autoload DESTROY, we here define it to do nothing.
333 ################################################
337 sub _open_mode_string {
339 $mode =~ /^\+?(<|>>?)$/
340 or $mode =~ s/^r(\+?)$/$1</
341 or $mode =~ s/^w(\+?)$/$1>/
342 or $mode =~ s/^a(\+?)$/$1>>/
343 or croak "IO::Handle: bad open mode: $mode";
348 @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
349 my ($io, $fd, $mode) = @_;
352 if (ref($fd) && "".$fd =~ /GLOB\(/o) {
353 # It's a glob reference; Alias it as we cannot get name of anon GLOBs
354 my $n = qualify(*GLOB);
357 } elsif ($fd =~ m#^\d+$#) {
358 # It's an FD number; prefix with "=".
362 open($io, _open_mode_string($mode) . '&' . $fd)
367 @_ == 1 or croak 'usage: $io->close()';
373 ################################################
374 ## Normal I/O functions.
381 @_ == 1 or croak 'usage: $io->opened()';
382 defined fileno($_[0]);
386 @_ == 1 or croak 'usage: $io->fileno()';
391 @_ == 1 or croak 'usage: $io->getc()';
396 @_ == 1 or croak 'usage: $io->eof()';
401 @_ or croak 'usage: $io->print(ARGS)';
407 @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
413 @_ or croak 'usage: $io->say(ARGS)';
420 @_ == 1 or croak 'usage: $io->getline()';
422 return scalar <$this>;
425 *gets = \&getline; # deprecated
428 @_ == 1 or croak 'usage: $io->getlines()';
430 croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
436 @_ == 2 or croak 'usage: $io->truncate(LEN)';
437 truncate($_[0], $_[1]);
441 @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
442 read($_[0], $_[1], $_[2], $_[3] || 0);
446 @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
447 sysread($_[0], $_[1], $_[2], $_[3] || 0);
451 @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
453 $_[2] = length($_[1]) unless defined $_[2];
454 print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
458 @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
459 if (defined($_[2])) {
460 syswrite($_[0], $_[1], $_[2], $_[3] || 0);
462 syswrite($_[0], $_[1]);
467 @_ == 1 or croak 'usage: $io->stat()';
471 ################################################
472 ## State modification functions.
476 my $old = new SelectSaver qualify($_[0], caller);
478 $| = @_ > 1 ? $_[1] : 1;
482 sub output_field_separator {
483 carp "output_field_separator is not supported on a per-handle basis"
486 $, = $_[1] if @_ > 1;
490 sub output_record_separator {
491 carp "output_record_separator is not supported on a per-handle basis"
494 $\ = $_[1] if @_ > 1;
498 sub input_record_separator {
499 carp "input_record_separator is not supported on a per-handle basis"
502 $/ = $_[1] if @_ > 1;
506 sub input_line_number {
508 () = tell qualify($_[0], caller) if ref($_[0]);
510 $. = $_[1] if @_ > 1;
514 sub format_page_number {
516 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
518 $% = $_[1] if @_ > 1;
522 sub format_lines_per_page {
524 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
526 $= = $_[1] if @_ > 1;
530 sub format_lines_left {
532 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
534 $- = $_[1] if @_ > 1;
540 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
542 $~ = qualify($_[1], caller) if @_ > 1;
546 sub format_top_name {
548 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
550 $^ = qualify($_[1], caller) if @_ > 1;
554 sub format_line_break_characters {
555 carp "format_line_break_characters is not supported on a per-handle basis"
558 $: = $_[1] if @_ > 1;
562 sub format_formfeed {
563 carp "format_formfeed is not supported on a per-handle basis"
566 $^L = $_[1] if @_ > 1;
575 formline($picture, @_);
580 @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
583 my $oldfmt = $io->format_name($fmt);
585 $io->format_name($oldfmt);
593 @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
595 return fcntl($io, $op, $_[2]);
600 @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
602 return ioctl($io, $op, $_[2]);
605 # this sub is for compatability with older releases of IO that used
606 # a sub called constant to detemine if a constant existed -- GMB
608 # The SEEK_* and _IO?BF constants were the only constants at that time
609 # any new code should just chech defined(&CONSTANT_NAME)
614 (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
615 ? &{$name}() : undef;
619 # so that flush.pl can be deprecated
624 $old = new SelectSaver qualify($io, caller) if ref($io);