while(sysread(CSV, $record, 66)) { my $count = 0; my %map; $map{substr($record, 18, 14)}->{substr($record, 3, 15)} = substr($record, 36, 29); while (sysread(CSV, $record, 66)) { $map{substr($record, 18, 14)}->{substr($record, 3, 15)} = substr($record, 36, 29); if ($count++ > 1000) { $count = 0; last; } } &process(\%map); }