File Coverage

blib/lib/IO/Handle.pm
Criterion Covered Total %
statement 69 169 40.8
branch 19 110 17.2
condition 12 45 26.6
subroutine 20 44 45.4
pod 6 35 17.1
total 126 403 31.2


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