while ( /($regex)/gx ) { push @substrings, { match => $1, pos => ( pos() - length $1 ), length => length $1,}; # Restart the checking at one character after the match started. pos() = $-[0] + 1; }