my $length = length $string; my %seen; for my $i (0 .. $length - 1) { $seen{ substr($string, $i, 1) } ++; $seen{ substr($string, $i, 2) } ++ if $i < $length - 1; $seen{ substr($string, $i, 3) } ++ if $i < $length - 2; }