my %fh; while(<>) { my @record = split; $fh{$record[0]} || open($fh{$record[0]}); my $fh = $fh{$record[0]}; print $fh $_; }