open( my $fh, $infile ) or die "Cannot open '$infile' for reading: $!\n"; my %data; while ( defined( $_ = <$fh> ) ) { chomp; my @line = split( $_, ',', 2 ); push @{$data{$line[0]}}, $line[1]; } close( $fh ); open( $fh, ">$outfile" ) or die "Cannot open '$outfile' for writing: $!\n"; foreach my $k ( sort keys %data ) { print $fh join( ',', $k, @{$data{$k}} ), $/; } close( $fh );