sub seqsub(&) { $_[0] } #### sub count_zipped_combo_vals { my %counts; seq_foreach_from_spec( \@_, sub { seq_foreach( seq_zip( ( map seq(split//), @_ ) ), sub { $counts{"@_"}++ } ) }); \%counts; } #### # a few problem cases to try my @site1 = qw( AATKKM aatkkm ); my @site2 = qw( GGGGGG gggggg ); my @site3 = qw( XXXXXX ++++++ yyyyyy ); # ... and so on ... my @sites = \( @site1, @site2, @site3, # ... and so on ... ); # try 1-, 2-, and 3- array cases print Dumper( count_zipped_combo_vals( @sites[0..$_] ) ) for 0 .. $#sites; # $VAR1 = { # 'A' => 2, # 'k' => 2, # 'a' => 2, # 'M' => 1, # 'T' => 1, # 'K' => 2, # 'm' => 1, # 't' => 1 # }; # $VAR1 = { # 'K G' => 2, # 'A G' => 2, # 'm g' => 1, # 'a g' => 2, # 'A g' => 2, # 'M G' => 1, # 'k g' => 2, # 'k G' => 2, # 'T G' => 1, # 'a G' => 2, # 'm G' => 1, # 't G' => 1, # 'K g' => 2, # 'M g' => 1, # 't g' => 1, # 'T g' => 1 # }; # $VAR1 = { # 't G y' => 1, # 'T G +' => 1, # 'K G X' => 2, # 'a G X' => 2, # 'm G +' => 1, # 'a G +' => 2, # 'T g y' => 1, # 'm g +' => 1, # 'a g +' => 2, # 'k G X' => 2, # 'a g X' => 2, # 'm g X' => 1, # 'T g X' => 1, # 't G +' => 1, # 'M G y' => 1, # 'k g y' => 2, # 't g y' => 1, # 'm G X' => 1, # 't G X' => 1, # 'K G +' => 2, # 't g +' => 1, # 'a g y' => 2, # 'T G X' => 1, # 'm g y' => 1, # 'm G y' => 1, # 'A G X' => 2, # 'M g +' => 1, # 'k g +' => 2, # 'k g X' => 2, # 'A g X' => 2, # 'A g +' => 2, # 'M g y' => 1, # 'k G +' => 2, # 'a G y' => 2, # 'M G +' => 1, # 'A g y' => 2, # 'K g X' => 2, # 'K G y' => 2, # 'K g y' => 2, # 'K g +' => 2, # 'k G y' => 2, # 'A G y' => 2, # 'T g +' => 1, # 't g X' => 1, # 'M G X' => 1, # 'M g X' => 1, # 'T G y' => 1, # 'A G +' => 2 # };