foreach my $p (@packets) { foreach my $l (2..length($p)) { foreach my $pos (0..length($p)-$l) { my $str=substr($p, $pos, $l); $all{$str}+=$_ for map { scalar(($_ =~ /\Q$str\E/g)) } @packets; } } }