use strict;
my @filenames = qw/one.txt two.txt three.txt/;
my @filehandles;
foreach my $filename (@filenames) {
open my $fh, '<', $filename or die "Could not open $filename; $!";
push @filehandles, $fh;
} ## end foreach my $filename (@filenames)
while (1) {
my $lines_ref = read_lines_parallel(@filehandles);
last unless $lines_ref;
print join '|', @$lines_ref;
print '-' x 20, "\n";
} ## end while (1)
sub read_lines_parallel {
my @filehandles = @_;
my @lines;
foreach (@filehandles) {
push @lines, scalar <$_>;
} ## end foreach (@filehandles)
if ( join '', @lines ) {
return \@lines;
} ## end if ( join '', @lines )
else {
return undef;
} ## end else [ if ( join '', @lines )
} ## end sub read_lines_parallel
####
first line file 1
|line 1 file 2
|first line file 3
--------------------
second line file 1
|line 2 file 2
|second line file 3
--------------------
third line file 1
||third line file 3
--------------------
||fourth line file 3
--------------------
##
##
while (1) {
my $lines_ref = read_lines_parallel(@filehandles);
last unless $lines_ref;
print join '|', @$lines_ref;
print '-' x 20, "\n";
}
##
##
while (my $lines_ref = read_lines_parallel(@filehandles)) {
# Do something with $lines_ref or @$lines_ref here
print join '|', @$lines_ref;
print '-' x 20, "\n";
}