use strict; use warnings; open( INPUT, "sort $ARGV[0] |" ) or die "can't sort $ARGV[0]: $!"; my $outname = ""; while () { if ( /^(.+?),/ ) { my $newname = $1; if ( $newname ne $outname ) { close OUT if ( $outname ); open( OUT, ">$newname" ) or die "can't output to $newname:$!"; $outname = $newname; } print OUT; } else { warn "Sorted input from $ARGV[0] had unusable data at line $.: $_\n" } } close OUT;