use strict; use warnings; my %genes = ( '42-MG-BA' => { '19_35770059' => { cave => 'TC', gen => 'AA' }, '2_68019584' => { cave => 'G' }, '16_9561557' => { gen => 'AG' }, }, '41-OK-DZ' => { '7_158773210' => { gen => 'AA', cave => 'G'}, }, ); for my $gene (keys %genes) { for my $seq (keys %{$genes{$gene}}) { my $href = \%{$genes{$gene}{$seq}}; if (keys %$href > 1) { print "$gene:$seq:", join(",", map {"$_=$$href{$_}"} keys %$href), "\n"; } } } __OUTPUT__ 41-OK-DZ:7_158773210:gen=AA,cave=G 42-MG-BA:19_35770059:gen=AA,cave=TC