# set $listfile to some constant, or to $ARGV[0] (and supply the file name # as a command-line arg when you run the script) my %outfh; # hash to hold output file handles open ORIGFILE, $listfile or die "$listfile: $!"; while ( ) { my ( $host, $data ) = split " ", $_, 2; if ( ! exists( $outfh{$host} )) { open( $outfh{$host}, ">", $host ) or die "$host: $!"; } print $outfh{$host} $data; } # perl will flush and close output files when done