my $length = length $s; # Pull this out of the loop for eff. my $sequence = $seq{$k}; while ($sequence =~ /([QGYN]{3,6})/g) { my $seq = $1; my $pos = $-[0] - $length; # @- holds the positions on the last match next if $seq =~ /(.)\1\1/; print "\n$k $seq begins at position $pos\n"; }