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