Upgrade to IO 1.22 from gbarr
[p5sagit/p5-mst-13.2.git] / ext / IO / lib / IO / Handle.pm
CommitLineData
8add82fc 1package IO::Handle;
2
3=head1 NAME
4
27d4819a 5IO::Handle - supply object methods for I/O handles
8add82fc 6
7=head1 SYNOPSIS
8
9 use IO::Handle;
10
cf7fe8a2 11 $io = new IO::Handle;
12 if ($io->fdopen(fileno(STDIN),"r")) {
13 print $io->getline;
14 $io->close;
8add82fc 15 }
16
cf7fe8a2 17 $io = new IO::Handle;
18 if ($io->fdopen(fileno(STDOUT),"w")) {
19 $io->print("Some text\n");
8add82fc 20 }
21
284196a3 22 # setvbuf is not available by default on Perls 5.8.0 and later.
3370baa8 23 use IO::Handle '_IOLBF';
cf7fe8a2 24 $io->setvbuf($buffer_var, _IOLBF, 1024);
8add82fc 25
cf7fe8a2 26 undef $io; # automatically closes the file if it's open
774d564b 27
8add82fc 28 autoflush STDOUT 1;
29
30=head1 DESCRIPTION
31
774d564b 32C<IO::Handle> is the base class for all other IO handle classes. It is
33not intended that objects of C<IO::Handle> would be created directly,
34but instead C<IO::Handle> is inherited from by several other classes
35in the IO hierarchy.
36
37If you are reading this documentation, looking for a replacement for
38the C<FileHandle> package, then I suggest you read the documentation
cf7fe8a2 39for C<IO::File> too.
8add82fc 40
27d4819a 41=head1 CONSTRUCTOR
42
43=over 4
44
45=item new ()
8add82fc 46
27d4819a 47Creates a new C<IO::Handle> object.
8add82fc 48
27d4819a 49=item new_from_fd ( FD, MODE )
50
d1be9408 51Creates an C<IO::Handle> like C<new> does.
27d4819a 52It requires two parameters, which are passed to the method C<fdopen>;
53if the fdopen fails, the object is destroyed. Otherwise, it is returned
54to the caller.
55
56=back
57
58=head1 METHODS
8add82fc 59
8add82fc 60See L<perlfunc> for complete descriptions of each of the following
61supported C<IO::Handle> methods, which are just front ends for the
62corresponding built-in functions:
a6006777 63
cf7fe8a2 64 $io->close
65 $io->eof
66 $io->fileno
67 $io->format_write( [FORMAT_NAME] )
68 $io->getc
69 $io->read ( BUF, LEN, [OFFSET] )
70 $io->print ( ARGS )
71 $io->printf ( FMT, [ARGS] )
72 $io->stat
73 $io->sysread ( BUF, LEN, [OFFSET] )
2ecf2f18 74 $io->syswrite ( BUF, [LEN, [OFFSET]] )
cf7fe8a2 75 $io->truncate ( LEN )
8add82fc 76
77See L<perlvar> for complete descriptions of each of the following
cf7fe8a2 78supported C<IO::Handle> methods. All of them return the previous
79value of the attribute and takes an optional single argument that when
80given will set the value. If no argument is given the previous value
81is unchanged (except for $io->autoflush will actually turn ON
82autoflush by default).
8add82fc 83
cf7fe8a2 84 $io->autoflush ( [BOOL] ) $|
85 $io->format_page_number( [NUM] ) $%
86 $io->format_lines_per_page( [NUM] ) $=
87 $io->format_lines_left( [NUM] ) $-
88 $io->format_name( [STR] ) $~
89 $io->format_top_name( [STR] ) $^
90 $io->input_line_number( [NUM]) $.
91
92The following methods are not supported on a per-filehandle basis.
93
94 IO::Handle->format_line_break_characters( [STR] ) $:
95 IO::Handle->format_formfeed( [STR]) $^L
96 IO::Handle->output_field_separator( [STR] ) $,
97 IO::Handle->output_record_separator( [STR] ) $\
98
99 IO::Handle->input_record_separator( [STR] ) $/
8add82fc 100
101Furthermore, for doing normal I/O you might need these:
102
bbc7dcd2 103=over 4
8add82fc 104
cf7fe8a2 105=item $io->fdopen ( FD, MODE )
948ecc40 106
107C<fdopen> is like an ordinary C<open> except that its first parameter
d1be9408 108is not a filename but rather a file handle name, an IO::Handle object,
948ecc40 109or a file descriptor number.
110
cf7fe8a2 111=item $io->opened
948ecc40 112
a47f745f 113Returns true if the object is currently a valid file descriptor, false
114otherwise.
948ecc40 115
cf7fe8a2 116=item $io->getline
8add82fc 117
cf7fe8a2 118This works like <$io> described in L<perlop/"I/O Operators">
91e74348 119except that it's more readable and can be safely called in a
bb4e8523 120list context but still returns just one line. If used as the conditional
121+within a C<while> or C-style C<for> loop, however, you will need to
122+emulate the functionality of <$io> with C<< defined($_ = $io->getline) >>.
8add82fc 123
cf7fe8a2 124=item $io->getlines
8add82fc 125
91e74348 126This works like <$io> when called in a list context to read all
127the remaining lines in a file, except that it's more readable.
8add82fc 128It will also croak() if accidentally called in a scalar context.
129
cf7fe8a2 130=item $io->ungetc ( ORD )
27d4819a 131
948ecc40 132Pushes a character with the given ordinal value back onto the given
cf7fe8a2 133handle's input stream. Only one character of pushback per handle is
134guaranteed.
27d4819a 135
cf7fe8a2 136=item $io->write ( BUF, LEN [, OFFSET ] )
27d4819a 137
948ecc40 138This C<write> is like C<write> found in C, that is it is the
27d4819a 139opposite of read. The wrapper for the perl C<write> function is
140called C<format_write>.
141
cf7fe8a2 142=item $io->error
948ecc40 143
144Returns a true value if the given handle has experienced any errors
a47f745f 145since it was opened or since the last call to C<clearerr>, or if the
146handle is invalid. It only returns false for a valid handle with no
147outstanding errors.
948ecc40 148
cf7fe8a2 149=item $io->clearerr
948ecc40 150
a47f745f 151Clear the given handle's error indicator. Returns -1 if the handle is
152invalid, 0 otherwise.
27d4819a 153
cf7fe8a2 154=item $io->sync
155
156C<sync> synchronizes a file's in-memory state with that on the
157physical medium. C<sync> does not operate at the perlio api level, but
a47f745f 158operates on the file descriptor (similar to sysread, sysseek and
159systell). This means that any data held at the perlio api level will not
160be synchronized. To synchronize data that is buffered at the perlio api
161level you must use the flush method. C<sync> is not implemented on all
54d9745e 162platforms. Returns "0 but true" on success, C<undef> on error, C<undef>
163for an invalid handle. See L<fsync(3c)>.
cf7fe8a2 164
165=item $io->flush
166
167C<flush> causes perl to flush any buffered data at the perlio api level.
168Any unread data in the buffer will be discarded, and any unwritten data
54d9745e 169will be written to the underlying file descriptor. Returns "0 but true"
170on success, C<undef> on error.
cf7fe8a2 171
172=item $io->printflush ( ARGS )
173
174Turns on autoflush, print ARGS and then restores the autoflush status of the
a47f745f 175C<IO::Handle> object. Returns the return value from print.
cf7fe8a2 176
177=item $io->blocking ( [ BOOL ] )
178
179If called with an argument C<blocking> will turn on non-blocking IO if
180C<BOOL> is false, and turn it off if C<BOOL> is true.
181
182C<blocking> will return the value of the previous setting, or the
183current setting if C<BOOL> is not given.
184
185If an error occurs C<blocking> will return undef and C<$!> will be set.
186
8add82fc 187=back
188
cf7fe8a2 189
948ecc40 190If the C functions setbuf() and/or setvbuf() are available, then
191C<IO::Handle::setbuf> and C<IO::Handle::setvbuf> set the buffering
192policy for an IO::Handle. The calling sequences for the Perl functions
193are the same as their C counterparts--including the constants C<_IOFBF>,
194C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
a47f745f 195specifies a scalar variable to use as a buffer. You should only
196change the buffer before any I/O, or immediately after calling flush.
197
284196a3 198WARNING: The IO::Handle::setvbuf() is not available by default on
199Perls 5.8.0 and later because setvbuf() is rather specific to using
200the stdio library, while Perl prefers the new perlio subsystem instead.
201
a47f745f 202WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
203be modified> in any way until the IO::Handle is closed or C<setbuf> or
204C<setvbuf> is called again, or memory corruption may result! Remember that
205the order of global destruction is undefined, so even if your buffer
206variable remains in scope until program termination, it may be undefined
207before the file IO::Handle is closed. Note that you need to import the
208constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
54d9745e 209returns nothing. setvbuf returns "0 but true", on success, C<undef> on
210failure.
948ecc40 211
212Lastly, there is a special method for working under B<-T> and setuid/gid
213scripts:
515e7bd7 214
bbc7dcd2 215=over 4
515e7bd7 216
cf7fe8a2 217=item $io->untaint
515e7bd7 218
219Marks the object as taint-clean, and as such data read from it will also
220be considered taint-clean. Note that this is a very trusting action to
221take, and appropriate consideration for the data source and potential
a47f745f 222vulnerability should be kept in mind. Returns 0 on success, -1 if setting
223the taint-clean flag failed. (eg invalid handle)
515e7bd7 224
225=back
226
27d4819a 227=head1 NOTE
8add82fc 228
d1be9408 229An C<IO::Handle> object is a reference to a symbol/GLOB reference (see
cf7fe8a2 230the C<Symbol> package). Some modules that
8add82fc 231inherit from C<IO::Handle> may want to keep object related variables
232in the hash table part of the GLOB. In an attempt to prevent modules
233trampling on each other I propose the that any such module should prefix
234its variables with its own name separated by _'s. For example the IO::Socket
235module keeps a C<timeout> variable in 'io_socket_timeout'.
236
237=head1 SEE ALSO
238
239L<perlfunc>,
240L<perlop/"I/O Operators">,
774d564b 241L<IO::File>
8add82fc 242
243=head1 BUGS
244
245Due to backwards compatibility, all filehandles resemble objects
246of class C<IO::Handle>, or actually classes derived from that class.
247They actually aren't. Which means you can't derive your own
248class from C<IO::Handle> and inherit those methods.
249
250=head1 HISTORY
251
cf7fe8a2 252Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
8add82fc 253
254=cut
255
3b825e41 256use 5.006_001;
7a4c00b4 257use strict;
17f410f9 258our($VERSION, @EXPORT_OK, @ISA);
8add82fc 259use Carp;
260use Symbol;
261use SelectSaver;
cf7fe8a2 262use IO (); # Load the XS module
8add82fc 263
264require Exporter;
265@ISA = qw(Exporter);
266
35a60386 267$VERSION = "1.25";
105cd853 268$VERSION = eval $VERSION;
8add82fc 269
270@EXPORT_OK = qw(
271 autoflush
272 output_field_separator
273 output_record_separator
274 input_record_separator
275 input_line_number
276 format_page_number
277 format_lines_per_page
278 format_lines_left
279 format_name
280 format_top_name
281 format_line_break_characters
282 format_formfeed
283 format_write
284
285 print
286 printf
287 getline
288 getlines
289
cf7fe8a2 290 printflush
291 flush
292
8add82fc 293 SEEK_SET
294 SEEK_CUR
295 SEEK_END
296 _IOFBF
297 _IOLBF
298 _IONBF
8add82fc 299);
300
8add82fc 301################################################
302## Constructors, destructors.
303##
304
305sub new {
27d4819a 306 my $class = ref($_[0]) || $_[0] || "IO::Handle";
307 @_ == 1 or croak "usage: new $class";
cf7fe8a2 308 my $io = gensym;
309 bless $io, $class;
8add82fc 310}
311
312sub new_from_fd {
27d4819a 313 my $class = ref($_[0]) || $_[0] || "IO::Handle";
314 @_ == 3 or croak "usage: new_from_fd $class FD, MODE";
cf7fe8a2 315 my $io = gensym;
c927212d 316 shift;
cf7fe8a2 317 IO::Handle::fdopen($io, @_)
8add82fc 318 or return undef;
cf7fe8a2 319 bless $io, $class;
8add82fc 320}
321
98d4926f 322#
323# There is no need for DESTROY to do anything, because when the
324# last reference to an IO object is gone, Perl automatically
325# closes its associated files (if any). However, to avoid any
326# attempts to autoload DESTROY, we here define it to do nothing.
327#
328sub DESTROY {}
7a4c00b4 329
8add82fc 330
331################################################
332## Open and close.
333##
334
335sub _open_mode_string {
336 my ($mode) = @_;
337 $mode =~ /^\+?(<|>>?)$/
338 or $mode =~ s/^r(\+?)$/$1</
339 or $mode =~ s/^w(\+?)$/$1>/
340 or $mode =~ s/^a(\+?)$/$1>>/
341 or croak "IO::Handle: bad open mode: $mode";
342 $mode;
343}
344
345sub fdopen {
cf7fe8a2 346 @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
347 my ($io, $fd, $mode) = @_;
8add82fc 348 local(*GLOB);
349
350 if (ref($fd) && "".$fd =~ /GLOB\(/o) {
351 # It's a glob reference; Alias it as we cannot get name of anon GLOBs
352 my $n = qualify(*GLOB);
353 *GLOB = *{*$fd};
354 $fd = $n;
355 } elsif ($fd =~ m#^\d+$#) {
356 # It's an FD number; prefix with "=".
357 $fd = "=$fd";
358 }
359
cf7fe8a2 360 open($io, _open_mode_string($mode) . '&' . $fd)
361 ? $io : undef;
8add82fc 362}
363
364sub close {
cf7fe8a2 365 @_ == 1 or croak 'usage: $io->close()';
366 my($io) = @_;
8add82fc 367
cf7fe8a2 368 close($io);
8add82fc 369}
370
371################################################
372## Normal I/O functions.
373##
374
8add82fc 375# flock
8add82fc 376# select
8add82fc 377
378sub opened {
cf7fe8a2 379 @_ == 1 or croak 'usage: $io->opened()';
8add82fc 380 defined fileno($_[0]);
381}
382
383sub fileno {
cf7fe8a2 384 @_ == 1 or croak 'usage: $io->fileno()';
8add82fc 385 fileno($_[0]);
386}
387
388sub getc {
cf7fe8a2 389 @_ == 1 or croak 'usage: $io->getc()';
8add82fc 390 getc($_[0]);
391}
392
8add82fc 393sub eof {
cf7fe8a2 394 @_ == 1 or croak 'usage: $io->eof()';
8add82fc 395 eof($_[0]);
396}
397
398sub print {
cf7fe8a2 399 @_ or croak 'usage: $io->print(ARGS)';
8add82fc 400 my $this = shift;
401 print $this @_;
402}
403
404sub printf {
cf7fe8a2 405 @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
8add82fc 406 my $this = shift;
407 printf $this @_;
408}
409
410sub getline {
cf7fe8a2 411 @_ == 1 or croak 'usage: $io->getline()';
8add82fc 412 my $this = shift;
413 return scalar <$this>;
414}
415
f86702cc 416*gets = \&getline; # deprecated
417
8add82fc 418sub getlines {
cf7fe8a2 419 @_ == 1 or croak 'usage: $io->getlines()';
8add82fc 420 wantarray or
cf7fe8a2 421 croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
27d4819a 422 my $this = shift;
8add82fc 423 return <$this>;
424}
425
426sub truncate {
cf7fe8a2 427 @_ == 2 or croak 'usage: $io->truncate(LEN)';
8add82fc 428 truncate($_[0], $_[1]);
429}
430
431sub read {
cf7fe8a2 432 @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
8add82fc 433 read($_[0], $_[1], $_[2], $_[3] || 0);
434}
435
27d4819a 436sub sysread {
cf7fe8a2 437 @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
27d4819a 438 sysread($_[0], $_[1], $_[2], $_[3] || 0);
439}
440
8add82fc 441sub write {
8fd73a68 442 @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
8add82fc 443 local($\) = "";
8fd73a68 444 $_[2] = length($_[1]) unless defined $_[2];
8add82fc 445 print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
446}
447
27d4819a 448sub syswrite {
8fd73a68 449 @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
2ecf2f18 450 if (defined($_[2])) {
451 syswrite($_[0], $_[1], $_[2], $_[3] || 0);
452 } else {
453 syswrite($_[0], $_[1]);
454 }
27d4819a 455}
456
8add82fc 457sub stat {
cf7fe8a2 458 @_ == 1 or croak 'usage: $io->stat()';
8add82fc 459 stat($_[0]);
460}
461
462################################################
463## State modification functions.
464##
465
466sub autoflush {
cf7fe8a2 467 my $old = new SelectSaver qualify($_[0], caller);
8add82fc 468 my $prev = $|;
469 $| = @_ > 1 ? $_[1] : 1;
470 $prev;
471}
472
473sub output_field_separator {
cf7fe8a2 474 carp "output_field_separator is not supported on a per-handle basis"
475 if ref($_[0]);
8add82fc 476 my $prev = $,;
477 $, = $_[1] if @_ > 1;
478 $prev;
479}
480
481sub output_record_separator {
cf7fe8a2 482 carp "output_record_separator is not supported on a per-handle basis"
483 if ref($_[0]);
8add82fc 484 my $prev = $\;
485 $\ = $_[1] if @_ > 1;
486 $prev;
487}
488
489sub input_record_separator {
cf7fe8a2 490 carp "input_record_separator is not supported on a per-handle basis"
491 if ref($_[0]);
8add82fc 492 my $prev = $/;
493 $/ = $_[1] if @_ > 1;
494 $prev;
495}
496
497sub input_line_number {
91cce263 498 local $.;
76df5e8f 499 () = tell qualify($_[0], caller) if ref($_[0]);
91cce263 500 my $prev = $.;
501 $. = $_[1] if @_ > 1;
502 $prev;
503}
91cce263 504
8add82fc 505sub format_page_number {
76df5e8f 506 my $old;
507 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 508 my $prev = $%;
509 $% = $_[1] if @_ > 1;
510 $prev;
511}
512
513sub format_lines_per_page {
76df5e8f 514 my $old;
515 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 516 my $prev = $=;
517 $= = $_[1] if @_ > 1;
518 $prev;
519}
520
521sub format_lines_left {
76df5e8f 522 my $old;
523 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 524 my $prev = $-;
525 $- = $_[1] if @_ > 1;
526 $prev;
527}
528
529sub format_name {
76df5e8f 530 my $old;
531 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 532 my $prev = $~;
533 $~ = qualify($_[1], caller) if @_ > 1;
534 $prev;
535}
536
537sub format_top_name {
76df5e8f 538 my $old;
539 $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 540 my $prev = $^;
541 $^ = qualify($_[1], caller) if @_ > 1;
542 $prev;
543}
544
545sub format_line_break_characters {
cf7fe8a2 546 carp "format_line_break_characters is not supported on a per-handle basis"
547 if ref($_[0]);
8add82fc 548 my $prev = $:;
549 $: = $_[1] if @_ > 1;
550 $prev;
551}
552
553sub format_formfeed {
cf7fe8a2 554 carp "format_formfeed is not supported on a per-handle basis"
555 if ref($_[0]);
8add82fc 556 my $prev = $^L;
557 $^L = $_[1] if @_ > 1;
558 $prev;
559}
560
561sub formline {
cf7fe8a2 562 my $io = shift;
8add82fc 563 my $picture = shift;
564 local($^A) = $^A;
565 local($\) = "";
566 formline($picture, @_);
cf7fe8a2 567 print $io $^A;
8add82fc 568}
569
570sub format_write {
cf7fe8a2 571 @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
8add82fc 572 if (@_ == 2) {
cf7fe8a2 573 my ($io, $fmt) = @_;
574 my $oldfmt = $io->format_name($fmt);
575 CORE::write($io);
576 $io->format_name($oldfmt);
8add82fc 577 } else {
56f7f34b 578 CORE::write($_[0]);
8add82fc 579 }
580}
581
21e970cc 582# XXX undocumented
27d4819a 583sub fcntl {
cf7fe8a2 584 @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
21e970cc 585 my ($io, $op) = @_;
586 return fcntl($io, $op, $_[2]);
27d4819a 587}
588
21e970cc 589# XXX undocumented
27d4819a 590sub ioctl {
cf7fe8a2 591 @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
21e970cc 592 my ($io, $op) = @_;
593 return ioctl($io, $op, $_[2]);
27d4819a 594}
8add82fc 595
cf7fe8a2 596# this sub is for compatability with older releases of IO that used
597# a sub called constant to detemine if a constant existed -- GMB
598#
599# The SEEK_* and _IO?BF constants were the only constants at that time
600# any new code should just chech defined(&CONSTANT_NAME)
601
602sub constant {
603 no strict 'refs';
604 my $name = shift;
605 (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
606 ? &{$name}() : undef;
607}
608
609
6facdfff 610# so that flush.pl can be deprecated
cf7fe8a2 611
612sub printflush {
613 my $io = shift;
76df5e8f 614 my $old;
615 $old = new SelectSaver qualify($io, caller) if ref($io);
cf7fe8a2 616 local $| = 1;
617 if(ref($io)) {
618 print $io @_;
619 }
620 else {
621 print @_;
622 }
623}
624
8add82fc 6251;