Dave Mitchell suggested this perldelta entry for the SVp_* reordering.
[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
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
284196a3 196WARNING: The IO::Handle::setvbuf() is not available by default on
197Perls 5.8.0 and later because setvbuf() is rather specific to using
198the stdio library, while Perl prefers the new perlio subsystem instead.
199
a47f745f 200WARNING: A variable used as a buffer by C<setbuf> or C<setvbuf> B<must not
201be modified> in any way until the IO::Handle is closed or C<setbuf> or
202C<setvbuf> is called again, or memory corruption may result! Remember that
203the order of global destruction is undefined, so even if your buffer
204variable remains in scope until program termination, it may be undefined
205before the file IO::Handle is closed. Note that you need to import the
206constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
54d9745e 207returns nothing. setvbuf returns "0 but true", on success, C<undef> on
208failure.
948ecc40 209
210Lastly, there is a special method for working under B<-T> and setuid/gid
211scripts:
515e7bd7 212
bbc7dcd2 213=over 4
515e7bd7 214
cf7fe8a2 215=item $io->untaint
515e7bd7 216
217Marks the object as taint-clean, and as such data read from it will also
218be considered taint-clean. Note that this is a very trusting action to
219take, and appropriate consideration for the data source and potential
a47f745f 220vulnerability should be kept in mind. Returns 0 on success, -1 if setting
221the taint-clean flag failed. (eg invalid handle)
515e7bd7 222
223=back
224
27d4819a 225=head1 NOTE
8add82fc 226
d1be9408 227An C<IO::Handle> object is a reference to a symbol/GLOB reference (see
cf7fe8a2 228the C<Symbol> package). Some modules that
8add82fc 229inherit from C<IO::Handle> may want to keep object related variables
230in the hash table part of the GLOB. In an attempt to prevent modules
231trampling on each other I propose the that any such module should prefix
232its variables with its own name separated by _'s. For example the IO::Socket
233module keeps a C<timeout> variable in 'io_socket_timeout'.
234
235=head1 SEE ALSO
236
237L<perlfunc>,
238L<perlop/"I/O Operators">,
774d564b 239L<IO::File>
8add82fc 240
241=head1 BUGS
242
243Due to backwards compatibility, all filehandles resemble objects
244of class C<IO::Handle>, or actually classes derived from that class.
245They actually aren't. Which means you can't derive your own
246class from C<IO::Handle> and inherit those methods.
247
248=head1 HISTORY
249
cf7fe8a2 250Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
8add82fc 251
252=cut
253
3b825e41 254use 5.006_001;
7a4c00b4 255use strict;
17f410f9 256our($VERSION, @EXPORT_OK, @ISA);
8add82fc 257use Carp;
258use Symbol;
259use SelectSaver;
cf7fe8a2 260use IO (); # Load the XS module
8add82fc 261
262require Exporter;
263@ISA = qw(Exporter);
264
e9d8cdc0 265$VERSION = "1.23";
105cd853 266$VERSION = eval $VERSION;
8add82fc 267
268@EXPORT_OK = qw(
269 autoflush
270 output_field_separator
271 output_record_separator
272 input_record_separator
273 input_line_number
274 format_page_number
275 format_lines_per_page
276 format_lines_left
277 format_name
278 format_top_name
279 format_line_break_characters
280 format_formfeed
281 format_write
282
283 print
284 printf
285 getline
286 getlines
287
cf7fe8a2 288 printflush
289 flush
290
8add82fc 291 SEEK_SET
292 SEEK_CUR
293 SEEK_END
294 _IOFBF
295 _IOLBF
296 _IONBF
8add82fc 297);
298
8add82fc 299################################################
300## Constructors, destructors.
301##
302
303sub new {
27d4819a 304 my $class = ref($_[0]) || $_[0] || "IO::Handle";
305 @_ == 1 or croak "usage: new $class";
cf7fe8a2 306 my $io = gensym;
307 bless $io, $class;
8add82fc 308}
309
310sub new_from_fd {
27d4819a 311 my $class = ref($_[0]) || $_[0] || "IO::Handle";
312 @_ == 3 or croak "usage: new_from_fd $class FD, MODE";
cf7fe8a2 313 my $io = gensym;
c927212d 314 shift;
cf7fe8a2 315 IO::Handle::fdopen($io, @_)
8add82fc 316 or return undef;
cf7fe8a2 317 bless $io, $class;
8add82fc 318}
319
98d4926f 320#
321# There is no need for DESTROY to do anything, because when the
322# last reference to an IO object is gone, Perl automatically
323# closes its associated files (if any). However, to avoid any
324# attempts to autoload DESTROY, we here define it to do nothing.
325#
326sub DESTROY {}
7a4c00b4 327
8add82fc 328
329################################################
330## Open and close.
331##
332
333sub _open_mode_string {
334 my ($mode) = @_;
335 $mode =~ /^\+?(<|>>?)$/
336 or $mode =~ s/^r(\+?)$/$1</
337 or $mode =~ s/^w(\+?)$/$1>/
338 or $mode =~ s/^a(\+?)$/$1>>/
339 or croak "IO::Handle: bad open mode: $mode";
340 $mode;
341}
342
343sub fdopen {
cf7fe8a2 344 @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
345 my ($io, $fd, $mode) = @_;
8add82fc 346 local(*GLOB);
347
348 if (ref($fd) && "".$fd =~ /GLOB\(/o) {
349 # It's a glob reference; Alias it as we cannot get name of anon GLOBs
350 my $n = qualify(*GLOB);
351 *GLOB = *{*$fd};
352 $fd = $n;
353 } elsif ($fd =~ m#^\d+$#) {
354 # It's an FD number; prefix with "=".
355 $fd = "=$fd";
356 }
357
cf7fe8a2 358 open($io, _open_mode_string($mode) . '&' . $fd)
359 ? $io : undef;
8add82fc 360}
361
362sub close {
cf7fe8a2 363 @_ == 1 or croak 'usage: $io->close()';
364 my($io) = @_;
8add82fc 365
cf7fe8a2 366 close($io);
8add82fc 367}
368
369################################################
370## Normal I/O functions.
371##
372
8add82fc 373# flock
8add82fc 374# select
8add82fc 375
376sub opened {
cf7fe8a2 377 @_ == 1 or croak 'usage: $io->opened()';
8add82fc 378 defined fileno($_[0]);
379}
380
381sub fileno {
cf7fe8a2 382 @_ == 1 or croak 'usage: $io->fileno()';
8add82fc 383 fileno($_[0]);
384}
385
386sub getc {
cf7fe8a2 387 @_ == 1 or croak 'usage: $io->getc()';
8add82fc 388 getc($_[0]);
389}
390
8add82fc 391sub eof {
cf7fe8a2 392 @_ == 1 or croak 'usage: $io->eof()';
8add82fc 393 eof($_[0]);
394}
395
396sub print {
cf7fe8a2 397 @_ or croak 'usage: $io->print(ARGS)';
8add82fc 398 my $this = shift;
399 print $this @_;
400}
401
402sub printf {
cf7fe8a2 403 @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
8add82fc 404 my $this = shift;
405 printf $this @_;
406}
407
408sub getline {
cf7fe8a2 409 @_ == 1 or croak 'usage: $io->getline()';
8add82fc 410 my $this = shift;
411 return scalar <$this>;
412}
413
f86702cc 414*gets = \&getline; # deprecated
415
8add82fc 416sub getlines {
cf7fe8a2 417 @_ == 1 or croak 'usage: $io->getlines()';
8add82fc 418 wantarray or
cf7fe8a2 419 croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
27d4819a 420 my $this = shift;
8add82fc 421 return <$this>;
422}
423
424sub truncate {
cf7fe8a2 425 @_ == 2 or croak 'usage: $io->truncate(LEN)';
8add82fc 426 truncate($_[0], $_[1]);
427}
428
429sub read {
cf7fe8a2 430 @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
8add82fc 431 read($_[0], $_[1], $_[2], $_[3] || 0);
432}
433
27d4819a 434sub sysread {
cf7fe8a2 435 @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
27d4819a 436 sysread($_[0], $_[1], $_[2], $_[3] || 0);
437}
438
8add82fc 439sub write {
8fd73a68 440 @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
8add82fc 441 local($\) = "";
8fd73a68 442 $_[2] = length($_[1]) unless defined $_[2];
8add82fc 443 print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
444}
445
27d4819a 446sub syswrite {
8fd73a68 447 @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
2ecf2f18 448 if (defined($_[2])) {
449 syswrite($_[0], $_[1], $_[2], $_[3] || 0);
450 } else {
451 syswrite($_[0], $_[1]);
452 }
27d4819a 453}
454
8add82fc 455sub stat {
cf7fe8a2 456 @_ == 1 or croak 'usage: $io->stat()';
8add82fc 457 stat($_[0]);
458}
459
460################################################
461## State modification functions.
462##
463
464sub autoflush {
cf7fe8a2 465 my $old = new SelectSaver qualify($_[0], caller);
8add82fc 466 my $prev = $|;
467 $| = @_ > 1 ? $_[1] : 1;
468 $prev;
469}
470
471sub output_field_separator {
cf7fe8a2 472 carp "output_field_separator is not supported on a per-handle basis"
473 if ref($_[0]);
8add82fc 474 my $prev = $,;
475 $, = $_[1] if @_ > 1;
476 $prev;
477}
478
479sub output_record_separator {
cf7fe8a2 480 carp "output_record_separator is not supported on a per-handle basis"
481 if ref($_[0]);
8add82fc 482 my $prev = $\;
483 $\ = $_[1] if @_ > 1;
484 $prev;
485}
486
487sub input_record_separator {
cf7fe8a2 488 carp "input_record_separator is not supported on a per-handle basis"
489 if ref($_[0]);
8add82fc 490 my $prev = $/;
491 $/ = $_[1] if @_ > 1;
492 $prev;
493}
494
495sub input_line_number {
91cce263 496 local $.;
497 my $tell = tell qualify($_[0], caller) if ref($_[0]);
498 my $prev = $.;
499 $. = $_[1] if @_ > 1;
500 $prev;
501}
91cce263 502
8add82fc 503sub format_page_number {
b61d194c 504 my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 505 my $prev = $%;
506 $% = $_[1] if @_ > 1;
507 $prev;
508}
509
510sub format_lines_per_page {
b61d194c 511 my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 512 my $prev = $=;
513 $= = $_[1] if @_ > 1;
514 $prev;
515}
516
517sub format_lines_left {
b61d194c 518 my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 519 my $prev = $-;
520 $- = $_[1] if @_ > 1;
521 $prev;
522}
523
524sub format_name {
b61d194c 525 my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 526 my $prev = $~;
527 $~ = qualify($_[1], caller) if @_ > 1;
528 $prev;
529}
530
531sub format_top_name {
b61d194c 532 my $old = new SelectSaver qualify($_[0], caller) if ref($_[0]);
8add82fc 533 my $prev = $^;
534 $^ = qualify($_[1], caller) if @_ > 1;
535 $prev;
536}
537
538sub format_line_break_characters {
cf7fe8a2 539 carp "format_line_break_characters is not supported on a per-handle basis"
540 if ref($_[0]);
8add82fc 541 my $prev = $:;
542 $: = $_[1] if @_ > 1;
543 $prev;
544}
545
546sub format_formfeed {
cf7fe8a2 547 carp "format_formfeed is not supported on a per-handle basis"
548 if ref($_[0]);
8add82fc 549 my $prev = $^L;
550 $^L = $_[1] if @_ > 1;
551 $prev;
552}
553
554sub formline {
cf7fe8a2 555 my $io = shift;
8add82fc 556 my $picture = shift;
557 local($^A) = $^A;
558 local($\) = "";
559 formline($picture, @_);
cf7fe8a2 560 print $io $^A;
8add82fc 561}
562
563sub format_write {
cf7fe8a2 564 @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
8add82fc 565 if (@_ == 2) {
cf7fe8a2 566 my ($io, $fmt) = @_;
567 my $oldfmt = $io->format_name($fmt);
568 CORE::write($io);
569 $io->format_name($oldfmt);
8add82fc 570 } else {
56f7f34b 571 CORE::write($_[0]);
8add82fc 572 }
573}
574
21e970cc 575# XXX undocumented
27d4819a 576sub fcntl {
cf7fe8a2 577 @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
21e970cc 578 my ($io, $op) = @_;
579 return fcntl($io, $op, $_[2]);
27d4819a 580}
581
21e970cc 582# XXX undocumented
27d4819a 583sub ioctl {
cf7fe8a2 584 @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
21e970cc 585 my ($io, $op) = @_;
586 return ioctl($io, $op, $_[2]);
27d4819a 587}
8add82fc 588
cf7fe8a2 589# this sub is for compatability with older releases of IO that used
590# a sub called constant to detemine if a constant existed -- GMB
591#
592# The SEEK_* and _IO?BF constants were the only constants at that time
593# any new code should just chech defined(&CONSTANT_NAME)
594
595sub constant {
596 no strict 'refs';
597 my $name = shift;
598 (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
599 ? &{$name}() : undef;
600}
601
602
6facdfff 603# so that flush.pl can be deprecated
cf7fe8a2 604
605sub printflush {
606 my $io = shift;
607 my $old = new SelectSaver qualify($io, caller) if ref($io);
608 local $| = 1;
609 if(ref($io)) {
610 print $io @_;
611 }
612 else {
613 print @_;
614 }
615}
616
8add82fc 6171;