my %hash2 = (); my %unique = (); foreach my $test (grep(!$unique{$_}++, values %hash)) { $hash2{$test} .= join(",", grep({$hash{$_} eq $test ? hash{$_} : undef} keys %hash)); }