while (<>) { my ($node) = split /,/; open $node, ">>$node" or die "a horrible death!"; print $node $_; close $node; } #### my %cache; while (<>) { my ($node) = split /,/; unless ($cache{$node}) { open $node,">>$node" or die "a horrible death"; $cache{$node}++; } print $node $_; } for my $n (keys %cache) { close $n; }