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