$starttime = time; printf ("start - %d\n",$starttime); $pref = ""; for ($j = 0; $j < 10; $j++) { unlink "-$j"; } sortfile("numbers.dat", $pref, 7); for ($i = 6; $i >= 0; $i--) { for ($j = 0; $j < 10; $j++) { unlink "$pref-A-$j"; } for ($j = 0; $j < 10; $j++) { sortfile("$pref-$j", "$pref-A", $i); } $pref .= "-A"; } printf ("end sort - %d (%d)\n",time, time - $starttime); open (FILE, ">sorted.dat") || die; for ($i = 0; $i < 10; $i++) { open(IN, "$pref-$i") || die; while() { print FILE $_; } close(IN); } close(FILE); printf ("end - %d (%d)\n",time, time - $starttime); sub sortfile { my ($source, $pref, $offset) = @_; my $i, @fh; printf("$offset $pref $source - %d\n", time - $starttime); open(FILE, $source) || die; for ($i = 0; $i < 10; $i++) { open($fh[$i], ">>$pref-$i") || die; } while() { $f = $fh[substr($_, $offset, 1)]; print $f $_; } close(FILE); for ($i = 0; $i < 10; $i++) { close($fh[$i]); } }