use PDL; @observed = ("ab", "ab", "ad", "an", "bd", "bn", "dn"); $ngramOrder = 2; $alph = "{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}"; @perms = glob $alph x $ngramOrder; foreach $obs (@observed) { push @hits, grep { $perms[$_] eq $obs } 0..$#perms; } @permCounts=list(zeroes($#perms+1)); foreach $hit (@hits) { $permCounts[$hit]++; }