my $file_pos = tell($fh);
####
seek($fh, $file_pos, 0);
####
#!env perl
use strict;
use warnings;
our @Files = @ARGV;
MAIN: {
# A table storing each active filename and its
# current position
my %file_table = ();
# Line number for each file we're reading through
# (for printout purposes only)
my $line_num = 0;
# Set up our file table to point everything to 0
foreach my $file (@Files) {
$file_table{$file} = 0;
}
# Keep printing each line so long as at least one file
# has stuff to print
while ( scalar keys %file_table ) {
# Keep track of line numbers
$line_num++;
# Open each file, seek to last read position,
# read a line, then note the next position
foreach my $file ( sort keys %file_table ) {
open( my $fh, '<', $file ) or die "Oops! $!";
seek( $fh, $file_table{$file}, 0 );
my $line = <$fh>;
print "$file\t$line_num\t$line\n";
if ( eof $fh ) {
delete $file_table{$file};
} else {
$file_table{$file} = tell($fh);
}
close($fh);
}
}
print "All done\n";
}