use Parallel::ForkManager; open my $fh, '<', 'foo.csv' or die "ack: $!"; my $pm = Parallel::ForkManager->new( MAX_KIDS ); while(<$fh>) { my $pid = $pm->start and next; { your_sub( split ',' ); } $pm->end; }