File Coverage

blib/lib/IO/Handle.pm
Criterion Covered Total %
statement 75 173 43.3
branch 23 114 20.1
condition 14 48 29.1
subroutine 22 45 48.8
pod 7 36 19.4
total 141 416 33.8


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             my $io = IO::Handle->new();
12             if ($io->fdopen(fileno(STDIN),"r")) {
13             print $io->getline;
14             $io->close;
15             }
16              
17             my $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(my $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             =item binmode( [LAYER] )
195              
196             C sets C on the underlying C object, as documented
197             in C.
198              
199             C accepts one optional parameter, which is the layer to be
200             passed on to the C call.
201              
202             =back
203              
204              
205             If the C functions setbuf() and/or setvbuf() are available, then
206             C and C set the buffering
207             policy for an IO::Handle. The calling sequences for the Perl functions
208             are the same as their C counterparts--including the constants C<_IOFBF>,
209             C<_IOLBF>, and C<_IONBF> for setvbuf()--except that the buffer parameter
210             specifies a scalar variable to use as a buffer. You should only
211             change the buffer before any I/O, or immediately after calling flush.
212              
213             WARNING: The IO::Handle::setvbuf() is not available by default on
214             Perls 5.8.0 and later because setvbuf() is rather specific to using
215             the stdio library, while Perl prefers the new perlio subsystem instead.
216              
217             WARNING: A variable used as a buffer by C or C B
218             be modified> in any way until the IO::Handle is closed or C or
219             C is called again, or memory corruption may result! Remember that
220             the order of global destruction is undefined, so even if your buffer
221             variable remains in scope until program termination, it may be undefined
222             before the file IO::Handle is closed. Note that you need to import the
223             constants C<_IOFBF>, C<_IOLBF>, and C<_IONBF> explicitly. Like C, setbuf
224             returns nothing. setvbuf returns "0 but true", on success, C on
225             failure.
226              
227             Lastly, there is a special method for working under B<-T> and setuid/gid
228             scripts:
229              
230             =over 4
231              
232             =item $io->untaint
233              
234             Marks the object as taint-clean, and as such data read from it will also
235             be considered taint-clean. Note that this is a very trusting action to
236             take, and appropriate consideration for the data source and potential
237             vulnerability should be kept in mind. Returns 0 on success, -1 if setting
238             the taint-clean flag failed. (eg invalid handle)
239              
240             =back
241              
242             =head1 NOTE
243              
244             An C object is a reference to a symbol/GLOB reference (see
245             the L package). Some modules that
246             inherit from C may want to keep object related variables
247             in the hash table part of the GLOB. In an attempt to prevent modules
248             trampling on each other I propose the that any such module should prefix
249             its variables with its own name separated by _'s. For example the IO::Socket
250             module keeps a C variable in 'io_socket_timeout'.
251              
252             =head1 SEE ALSO
253              
254             L,
255             L,
256             L
257              
258             =head1 BUGS
259              
260             Due to backwards compatibility, all filehandles resemble objects
261             of class C, or actually classes derived from that class.
262             They actually aren't. Which means you can't derive your own
263             class from C and inherit those methods.
264              
265             =head1 HISTORY
266              
267             Derived from FileHandle.pm by Graham Barr EFE
268              
269             =cut
270              
271 37     37   276826 use 5.008_001;
  37         192  
272 37     37   218 use strict;
  37         83  
  37         1085  
273 37     37   203 use Carp;
  37         66  
  37         3011  
274 37     37   16409 use Symbol;
  37         64000  
  37         3143  
275 37     37   14959 use SelectSaver;
  37         11203  
  37         1402  
276 37     37   16666 use IO (); # Load the XS module
  37         124  
  37         120984  
277              
278             require Exporter;
279             our @ISA = qw(Exporter);
280              
281             our $VERSION = "1.55";
282              
283             our @EXPORT_OK = qw(
284             autoflush
285             output_field_separator
286             output_record_separator
287             input_record_separator
288             input_line_number
289             format_page_number
290             format_lines_per_page
291             format_lines_left
292             format_name
293             format_top_name
294             format_line_break_characters
295             format_formfeed
296             format_write
297              
298             print
299             printf
300             say
301             getline
302             getlines
303              
304             printflush
305             flush
306              
307             SEEK_SET
308             SEEK_CUR
309             SEEK_END
310             _IOFBF
311             _IOLBF
312             _IONBF
313             );
314              
315             ################################################
316             ## Constructors, destructors.
317             ##
318              
319             sub new {
320 92   50 92 1 191881 my $class = ref($_[0]) || $_[0] || "IO::Handle";
321 92 50       609 if (@_ != 1) {
322             # Since perl will automatically require IO::File if needed, but
323             # also initialises IO::File's @ISA as part of the core we must
324             # ensure IO::File is loaded if IO::Handle is. This avoids effect-
325             # ively "half-loading" IO::File.
326 0 0 0     0 if ($] > 5.013 && $class eq 'IO::File' && !$INC{"IO/File.pm"}) {
      0        
327 0         0 require IO::File;
328 0         0 shift;
329 0         0 return IO::File::->new(@_);
330             }
331 0         0 croak "usage: $class->new()";
332             }
333 92         1174 my $io = gensym;
334 92         4962 bless $io, $class;
335             }
336              
337             sub new_from_fd {
338 3   50 3 1 39 my $class = ref($_[0]) || $_[0] || "IO::Handle";
339 3 50       14 @_ == 3 or croak "usage: $class->new_from_fd(FD, MODE)";
340 3         16 my $io = gensym;
341 3         44 shift;
342 3 50       17 IO::Handle::fdopen($io, @_)
343             or return undef;
344 3         15 bless $io, $class;
345             }
346              
347             #
348             # There is no need for DESTROY to do anything, because when the
349             # last reference to an IO object is gone, Perl automatically
350             # closes its associated files (if any). However, to avoid any
351             # attempts to autoload DESTROY, we here define it to do nothing.
352             #
353       0     sub DESTROY {}
354              
355              
356             ################################################
357             ## Open and close.
358             ##
359              
360             sub _open_mode_string {
361 12     12   19739 my ($mode) = @_;
362 12 50 66     465 $mode =~ /^\+?(<|>>?)$/
      66        
      33        
363             or $mode =~ s/^r(\+?)$/$1
364             or $mode =~ s/^w(\+?)$/$1>/
365             or $mode =~ s/^a(\+?)$/$1>>/
366             or croak "IO::Handle: bad open mode: $mode";
367 12         715 $mode;
368             }
369              
370             sub fdopen {
371 10 50   10 1 98 @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)';
372 10         56 my ($io, $fd, $mode) = @_;
373 10         38 local(*GLOB);
374              
375 10 100 66     244 if (ref($fd) && "$fd" =~ /GLOB\(/o) {
    50          
376             # It's a glob reference; Alias it as we cannot get name of anon GLOBs
377 7         111 my $n = qualify(*GLOB);
378 7         179 *GLOB = *{*$fd};
  7         78  
379 7         16 $fd = $n;
380             } elsif ($fd =~ m#^\d+$#) {
381             # It's an FD number; prefix with "=".
382 3         7 $fd = "=$fd";
383             }
384              
385 10 50       172 open($io, _open_mode_string($mode) . '&' . $fd)
386             ? $io : undef;
387             }
388              
389             sub close {
390 34 50   34 0 1576885 @_ == 1 or croak 'usage: $io->close()';
391 34         127 my($io) = @_;
392              
393 34         1644 close($io);
394             }
395              
396             ################################################
397             ## Normal I/O functions.
398             ##
399              
400             # flock
401             # select
402              
403             sub opened {
404 0 0   0 1 0 @_ == 1 or croak 'usage: $io->opened()';
405 0         0 defined fileno($_[0]);
406             }
407              
408             sub fileno {
409 10 50   10 0 754 @_ == 1 or croak 'usage: $io->fileno()';
410 10         166 fileno($_[0]);
411             }
412              
413             sub getc {
414 8200 50   8200 0 2903196 @_ == 1 or croak 'usage: $io->getc()';
415 8200         44920 getc($_[0]);
416             }
417              
418             sub eof {
419 2 50   2 0 24 @_ == 1 or croak 'usage: $io->eof()';
420 2         42 eof($_[0]);
421             }
422              
423             sub print {
424 16 50   16 0 1016478 @_ or croak 'usage: $io->print(ARGS)';
425 16         55 my $this = shift;
426 16         1281 print $this @_;
427             }
428              
429             sub printf {
430 0 0   0 0 0 @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])';
431 0         0 my $this = shift;
432 0         0 printf $this @_;
433             }
434              
435             sub say {
436 0 0   0 0 0 @_ or croak 'usage: $io->say(ARGS)';
437 0         0 my $this = shift;
438 0         0 local $\ = "\n";
439 0         0 print $this @_;
440             }
441              
442             sub truncate {
443 0 0   0 0 0 @_ == 2 or croak 'usage: $io->truncate(LEN)';
444 0         0 truncate($_[0], $_[1]);
445             }
446              
447             sub read {
448 1 50 33 1 0 241 @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])';
449 1   50     15166 read($_[0], $_[1], $_[2], $_[3] || 0);
450             }
451              
452             sub sysread {
453 0 0 0 0 0 0 @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])';
454 0   0     0 sysread($_[0], $_[1], $_[2], $_[3] || 0);
455             }
456              
457             sub write {
458 0 0 0 0 1 0 @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])';
459 0         0 local($\) = "";
460 0 0       0 $_[2] = length($_[1]) unless defined $_[2];
461 0   0     0 print { $_[0] } substr($_[1], $_[3] || 0, $_[2]);
  0         0  
462             }
463              
464             sub syswrite {
465 1 50 33 1 0 169840 @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])';
466 1 50       3 if (defined($_[2])) {
467 0   0     0 syswrite($_[0], $_[1], $_[2], $_[3] || 0);
468             } else {
469 1         28 syswrite($_[0], $_[1]);
470             }
471             }
472              
473             sub stat {
474 0 0   0 0 0 @_ == 1 or croak 'usage: $io->stat()';
475 0         0 stat($_[0]);
476             }
477              
478             ################################################
479             ## State modification functions.
480             ##
481              
482             sub autoflush {
483 68     68 0 1517 my $old = SelectSaver->new(qualify($_[0], caller));
484 68         7687 my $prev = $|;
485 68 50       515 $| = @_ > 1 ? $_[1] : 1;
486 68         2194 $prev;
487             }
488              
489             sub output_field_separator {
490 0 0   0 0 0 carp "output_field_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 output_record_separator {
498 0 0   0 0 0 carp "output_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_record_separator {
506 0 0   0 0 0 carp "input_record_separator is not supported on a per-handle basis"
507             if ref($_[0]);
508 0         0 my $prev = $/;
509 0 0       0 $/ = $_[1] if @_ > 1;
510 0         0 $prev;
511             }
512              
513             sub input_line_number {
514 12     12 0 6565 local $.;
515 12 50       60 () = tell qualify($_[0], caller) if ref($_[0]);
516 12         71 my $prev = $.;
517 12 50       26 $. = $_[1] if @_ > 1;
518 12         34 $prev;
519             }
520              
521             sub format_page_number {
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_per_page {
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_lines_left {
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 $- = $_[1] if @_ > 1;
542 0         0 $prev;
543             }
544              
545             sub format_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_top_name {
554 0     0 0 0 my $old;
555 0 0       0 $old = SelectSaver->new(qualify($_[0], caller)) if ref($_[0]);
556 0         0 my $prev = $^;
557 0 0       0 $^ = qualify($_[1], caller) if @_ > 1;
558 0         0 $prev;
559             }
560              
561             sub format_line_break_characters {
562 0 0   0 0 0 carp "format_line_break_characters is not supported on a per-handle basis"
563             if ref($_[0]);
564 0         0 my $prev = $:;
565 0 0       0 $: = $_[1] if @_ > 1;
566 0         0 $prev;
567             }
568              
569             sub format_formfeed {
570 0 0   0 0 0 carp "format_formfeed is not supported on a per-handle basis"
571             if ref($_[0]);
572 0         0 my $prev = $^L;
573 0 0       0 $^L = $_[1] if @_ > 1;
574 0         0 $prev;
575             }
576              
577             sub formline {
578 0     0 0 0 my $io = shift;
579 0         0 my $picture = shift;
580 0         0 local($^A) = $^A;
581 0         0 local($\) = "";
582 0         0 formline($picture, @_);
583 0         0 print $io $^A;
584             }
585              
586             sub format_write {
587 0 0   0 0 0 @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )';
588 0 0       0 if (@_ == 2) {
589 0         0 my ($io, $fmt) = @_;
590 0         0 my $oldfmt = $io->format_name(qualify($fmt,caller));
591 0         0 CORE::write($io);
592 0         0 $io->format_name($oldfmt);
593             } else {
594 0         0 CORE::write($_[0]);
595             }
596             }
597              
598             sub fcntl {
599 0 0   0 0 0 @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );';
600 0         0 my ($io, $op) = @_;
601 0         0 return fcntl($io, $op, $_[2]);
602             }
603              
604             sub ioctl {
605 0 0   0 0 0 @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );';
606 0         0 my ($io, $op) = @_;
607 0         0 return ioctl($io, $op, $_[2]);
608             }
609              
610             # this sub is for compatibility with older releases of IO that used
611             # a sub called constant to determine if a constant existed -- GMB
612             #
613             # The SEEK_* and _IO?BF constants were the only constants at that time
614             # any new code should just check defined(&CONSTANT_NAME)
615              
616             sub constant {
617 37     37   440 no strict 'refs';
  37         121  
  37         14348  
618 6     6 0 195139 my $name = shift;
619             (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name})
620 6 50 33     29 ? &{$name}() : undef;
  6         10  
621             }
622              
623              
624             # so that flush.pl can be deprecated
625              
626             sub printflush {
627 0     0 1 0 my $io = shift;
628 0         0 my $old;
629 0 0       0 $old = SelectSaver->new(qualify($io, caller)) if ref($io);
630 0         0 local $| = 1;
631 0 0       0 if(ref($io)) {
632 0         0 print $io @_;
633             }
634             else {
635 0         0 print @_;
636             }
637             }
638              
639             ################################################
640             ## Binmode
641             ##
642              
643             sub binmode {
644 1 50 33 1 1 6 ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])';
645              
646 1         2 my($fh, $layer) = @_;
647              
648 1 50       11 return binmode $$fh unless $layer;
649 0           return binmode $$fh, $layer;
650             }
651              
652             1;