use Data::Dumper; my %reverse; while( my( $k,$v )= each %CodonMap) { $reverse{ $v }||= []; push @{ $reverse{ $v }}, $k; }; print Dumper \%reverse;