#! perl -slw use strict; use Time::HiRes qw[ time ]; use constant _10MB => 10*1024**2; $|++; my @fhs; open $fhs[ $_ ], '<:raw', sprintf"%02d", $_ for 1 .. 50; shift @fhs; my $start = time; my @bufs; read( $fhs[ $_ ], $bufs[ $_ ], _10MB ) for 0 .. 49; OUTER: while( @fhs ) { printf "\r%d\t", scalar( @fhs ); my $r = int rand @fhs; unless( length( $bufs[ $r ] ) ) { read( $fhs[ $r ], $bufs[ $r ], _10MB ) or do{ close $fhs[ $r ]; splice @fhs, $r, 1; splice @bufs, $r, 1; next OUTER; }; } my $nextRec = substr( $bufs[ $r ], -16, 16, '' ); } my $end = time; printf "Took %d seconds.\n", $end - $start;