while (sysread(CSV, $record, 66)) { my %map my $count=0; $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) { &process(\%map); last; } } &process }