use Modern::Perl; use Data::Dump qw /dump/; my @results; while () { my @codon = split '', (split /\s+/)[1]; while (my ($seq, $char) = each @codon) { $results[$seq]{$char}++; } } say dump(@results); __DATA__ first ACGATT--GAT second AGTTAAC-TTT third TTAGCAGG-TA #### ( { A => 2, T => 1 }, { C => 1, G => 1, T => 1 }, { A => 1, G => 1, T => 1 }, { A => 1, G => 1, T => 1 }, { A => 1, C => 1, T => 1 }, { A => 2, T => 1 }, { "-" => 1, "C" => 1, "G" => 1 }, { "-" => 2, "G" => 1 }, { "-" => 1, "G" => 1, "T" => 1 }, { A => 1, T => 2 }, { A => 1, T => 2 }, ) #### while () { my $seq; $results[$seq++]{$_}++ for split '', (split /\s+/)[1]; }