| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | # *|* PERL *|* | 
| 2 |  |  |  |  |  |  | # | 
| 3 |  |  |  |  |  |  | # Print to multiple filehandles with a single call | 
| 4 |  |  |  |  |  |  | # | 
| 5 |  |  |  |  |  |  | # File: Multi.pm | 
| 6 |  |  |  |  |  |  | # | 
| 7 |  |  |  |  |  |  | # Author: Nem W Schlecht | 
| 8 |  |  |  |  |  |  | # Last Modification: $Date: 1998/08/07 23:30:57 $ | 
| 9 |  |  |  |  |  |  | # | 
| 10 |  |  |  |  |  |  | # $Id: Multi.pm,v 1.1 1998/08/07 23:30:57 nem Exp $ | 
| 11 |  |  |  |  |  |  | # $Log: Multi.pm,v $ | 
| 12 |  |  |  |  |  |  | # Revision 1.1  1998/08/07 23:30:57  nem | 
| 13 |  |  |  |  |  |  | # Initial revision | 
| 14 |  |  |  |  |  |  | # | 
| 15 |  |  |  |  |  |  | # | 
| 16 |  |  |  |  |  |  | # | 
| 17 |  |  |  |  |  |  | # Copyright © 1996 by Nem W Schlecht.  All rights reserved. | 
| 18 |  |  |  |  |  |  | # This is free software; you can distribute it and/or | 
| 19 |  |  |  |  |  |  | # modify it under the same terms as Perl itself. | 
| 20 |  |  |  |  |  |  | # | 
| 21 |  |  |  |  |  |  |  | 
| 22 |  |  |  |  |  |  | package IO::File::Multi; | 
| 23 | 1 |  |  | 1 |  | 562 | use strict; | 
|  | 1 |  |  |  |  | 2 |  | 
|  | 1 |  |  |  |  | 38 |  | 
| 24 | 1 |  |  | 1 |  | 919 | use IO::File; | 
|  | 1 |  |  |  |  | 10892 |  | 
|  | 1 |  |  |  |  | 130 |  | 
| 25 | 1 |  |  | 1 |  | 8 | use Carp; | 
|  | 1 |  |  |  |  | 6 |  | 
|  | 1 |  |  |  |  | 45 |  | 
| 26 |  |  |  |  |  |  |  | 
| 27 | 1 |  |  | 1 |  | 5 | use vars qw($VERSION); | 
|  | 1 |  |  |  |  | 1 |  | 
|  | 1 |  |  |  |  | 638 |  | 
| 28 |  |  |  |  |  |  | $VERSION='1.02'; | 
| 29 |  |  |  |  |  |  |  | 
| 30 |  |  |  |  |  |  | sub new { | 
| 31 | 2 |  |  | 2 | 0 | 40 | my($class)=shift; | 
| 32 | 2 |  |  |  |  | 8 | return bless({}, $class); | 
| 33 |  |  |  |  |  |  | } | 
| 34 |  |  |  |  |  |  |  | 
| 35 |  |  |  |  |  |  | # | 
| 36 |  |  |  |  |  |  | # add another output | 
| 37 |  |  |  |  |  |  | sub open { | 
| 38 | 5 |  |  | 5 | 0 | 387 | my($self)=shift; | 
| 39 | 5 |  |  |  |  | 31 | my($fh)=new IO::File; | 
| 40 | 5 | 50 |  |  |  | 175 | $fh->open(@_) || carp(ref($self), " - open failed: '@_'"); | 
| 41 | 5 |  |  |  |  | 434 | push(@{$self->{handles}}, $fh); | 
|  | 5 |  |  |  |  | 27 |  | 
| 42 |  |  |  |  |  |  | } | 
| 43 |  |  |  |  |  |  |  | 
| 44 |  |  |  |  |  |  | # | 
| 45 |  |  |  |  |  |  | # Return refs to IO::File objects | 
| 46 |  |  |  |  |  |  | sub members { | 
| 47 | 1 |  |  | 1 | 0 | 129 | my($self)=shift; | 
| 48 | 1 |  |  |  |  | 3 | return @{$self->{handles}}; | 
|  | 1 |  |  |  |  | 5 |  | 
| 49 |  |  |  |  |  |  | } | 
| 50 |  |  |  |  |  |  |  | 
| 51 |  |  |  |  |  |  | # | 
| 52 |  |  |  |  |  |  | # IO::File stub routine | 
| 53 |  |  |  |  |  |  | sub fh_st { | 
| 54 | 6 |  |  | 6 | 0 | 8 | my($self)=shift; | 
| 55 | 6 |  |  |  |  | 15 | my(@args)=@_; | 
| 56 | 6 |  |  |  |  | 7 | my($ret); | 
| 57 | 6 |  |  |  |  | 43 | my($sub_call)=(split(/::/o,(caller(1))[3]))[-1];	# Ack! | 
| 58 | 6 |  |  |  |  | 13 | for (@{$self->{handles}}) { | 
|  | 6 |  |  |  |  | 15 |  | 
| 59 | 16 |  |  |  |  | 228 | $ret = $_->$sub_call(@args); | 
| 60 |  |  |  |  |  |  | } | 
| 61 | 6 |  |  |  |  | 190 | return $ret; | 
| 62 |  |  |  |  |  |  | } | 
| 63 |  |  |  |  |  |  |  | 
| 64 |  |  |  |  |  |  | # | 
| 65 |  |  |  |  |  |  | # Clean up. | 
| 66 |  |  |  |  |  |  | sub DESTROY { | 
| 67 | 2 |  |  | 2 |  | 25 | my($self)=shift; | 
| 68 | 2 |  |  |  |  | 6 | $self->close(); | 
| 69 |  |  |  |  |  |  | } | 
| 70 |  |  |  |  |  |  |  | 
| 71 | 3 |  |  | 3 | 0 | 18 | sub print { my($I)=shift; $I->fh_st(@_); } | 
|  | 3 |  |  |  |  | 12 |  | 
| 72 | 1 |  |  | 1 | 0 | 7 | sub printf { my($I)=shift; $I->fh_st(@_); } | 
|  | 1 |  |  |  |  | 4 |  | 
| 73 | 2 |  |  | 2 | 0 | 4 | sub close { my($I)=shift; $I->fh_st(@_); } | 
|  | 2 |  |  |  |  | 5 |  | 
| 74 | 0 |  |  | 0 | 0 |  | sub autoflush { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 75 | 0 |  |  | 0 | 0 |  | sub output_field_separator { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 76 | 0 |  |  | 0 | 0 |  | sub output_record_separator { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 77 | 0 |  |  | 0 | 0 |  | sub format_page_number { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 78 | 0 |  |  | 0 | 0 |  | sub format_lines_per_page { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 79 | 0 |  |  | 0 | 0 |  | sub format_lines_left { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 80 | 0 |  |  | 0 | 0 |  | sub format_name { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 81 | 0 |  |  | 0 | 0 |  | sub format_top_name { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 82 | 0 |  |  | 0 | 0 |  | sub format_line_break_characters { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 83 | 0 |  |  | 0 | 0 |  | sub format_formfeed { my($I)=shift; $I->fh_st(@_); } | 
|  | 0 |  |  |  |  |  |  | 
| 84 |  |  |  |  |  |  |  | 
| 85 |  |  |  |  |  |  | # | 
| 86 |  |  |  |  |  |  | # IO::File::Multi don't do input (yet - and maybe it never will) | 
| 87 |  |  |  |  |  |  | # | 
| 88 |  |  |  |  |  |  | #sub getline { my($I)=shift; $I->fh_st(@_); } | 
| 89 |  |  |  |  |  |  | #sub getlines { my($I)=shift; $I->fh_st(@_); } | 
| 90 |  |  |  |  |  |  | #sub input_record_separator { my($I)=shift; $I->fh_st(@_); } | 
| 91 |  |  |  |  |  |  | #sub input_line_number { my($I)=shift; $I->fh_st(@_); } | 
| 92 |  |  |  |  |  |  |  | 
| 93 |  |  |  |  |  |  | __END__ |