But that means that the regex could also be fixed without recourse to \G, by simply anchoring it to the start of the string:
while ($dna =~ /^(\w\w\w)*?TGA/g)
With
^ instead of
\G, the regex would match only once, even with the
/g modifier: because after a succesful match, the next match starts when the previous one ended, and
^ can't match there. With
\G, though, you can get all the matches from the loop.
#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my $dna = join q(), qw( TGA TGA ATG AGA );
for my $regex (qr/(\w\w\w)*?TGA/,
qr/^(\w\w\w)*?TGA/,
qr/\G(\w\w\w)*?TGA/,
) {
while ($dna =~ /$regex/g) {
say "TGA with $regex: ", pos $dna;
}
}
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,