G
George Mpouras
# Read files in parallel. FileHandles are closed automatically.
# Files are read at every iteration circulary, hope you like it !
use strict;
use warnings;
my $Read_line = Read_files_round_robin( 'file1.txt', 'file2.txt',
'file3.txt' );
while ( my $line = $Read_line->() ) {
last if $line eq '__ALL_FILES_HAVE_BEEN_READ__';
chomp $line;
print "$line\n";
}
sub Read_files_round_robin
{
my $fc = $#_;
my @FH;
for(my $i=0; $i<@_; $i++) { open $FH[$#_ - $i] , $_[$i] or die "Could not
read file \"$_[$i]\" because \"$^E\"\n" }
sub
{
local $_ = '__ALL_FILES_HAVE_BEEN_READ__';
for (my $i=$fc; $i>=0; $i--)
{
if ( eof $FH[$i] )
{
close $FH[$i];
splice @FH, $i, 1;
next
}
$_ = readline $FH[$i];
last
}
$fc = $fc == 0 ? $#FH : $fc - 1;
$_
}
}
# Files are read at every iteration circulary, hope you like it !
use strict;
use warnings;
my $Read_line = Read_files_round_robin( 'file1.txt', 'file2.txt',
'file3.txt' );
while ( my $line = $Read_line->() ) {
last if $line eq '__ALL_FILES_HAVE_BEEN_READ__';
chomp $line;
print "$line\n";
}
sub Read_files_round_robin
{
my $fc = $#_;
my @FH;
for(my $i=0; $i<@_; $i++) { open $FH[$#_ - $i] , $_[$i] or die "Could not
read file \"$_[$i]\" because \"$^E\"\n" }
sub
{
local $_ = '__ALL_FILES_HAVE_BEEN_READ__';
for (my $i=$fc; $i>=0; $i--)
{
if ( eof $FH[$i] )
{
close $FH[$i];
splice @FH, $i, 1;
next
}
$_ = readline $FH[$i];
last
}
$fc = $fc == 0 ? $#FH : $fc - 1;
$_
}
}