use strict; use warnings; use Readonly; use Data::Dumper qw( Dumper ); Readonly::Scalar my $seq => "ATCGGCGCCTAT" ; my %count; @count{ qw(A1 A2 A3 T1 T2 T3 C1 C2 C3 G1 G2 G3 ) } = (0) x (3*4); foreach my $i (0 .. length($seq)-1 ) { my $pos = $i % 3 + 1; my $base = substr $seq, $i, 1; $count{$base.$pos}++; } $Data::Dumper::Sortkeys = 1; print Dumper \%count;