in reply to Hashes with Multiple Keys and Combining Them

If you use the ID, name and description parts, including the last comma, as the key to a hash entry and make the value an anonymous array onto which you push the application then you can print the key and then the joined elements quite simply.

use strict; use warnings; open my $inFH, q{<}, \ <<'EOD' or die qq{open: << HEREDOC: $!\n}; 1,XYZ,desc,PDF 2,YGH,desc,KMN 1,XYZ,desc,QFZ EOD my %ids; while ( <$inFH> ) { chomp; my ( $key, $value ) = m{^(.*,)(.*)$}; push @{ $ids{ $key } }, $value; } print qq{$_@{ [ join q{,}, @{ $ids{ $_ } } ] }\n} for keys %ids; close $inFH or die qq{close: << HEREDOC: $!\n};

The results.

1,XYZ,desc,PDF,QFZ 2,YGH,desc,KMN

Note that hashes are not ordered so if you want to impose a particular order in your output file you will need to sort the keys in some fashion. This exercise is left to the reader.

I hope this is useful.

Cheers,

JohnGG

Update: Corrected typo, s/nor/not/