use strict; use warnings; use Data::Dump qw /pp dd/; my %aas = ( 'serine' => ['TCA', 'TCC', 'TCG', 'TCT'], 'proline' => ['CCA', 'CCC', 'CCG', 'CCT'] ); my %codes; $codes{'earth'} = \%aas; $codes{'mars'} = { 'serine' => ['QWZ', 'QWX', 'QWW'], 'proline' => ['ZXZ', 'ZXX', 'ZXQ', 'ZXW'] }; dd \%codes; # dump for clarity base_code (\%codes); sub base_code { my ($h_codes) = @_; for my $h_planet (values %$h_codes) { for my $a_aa (values %$h_planet) { # for my $codon ( @$a_aa ) { print $codon, "\n"; } } } }