http://www.perlmonks.org?node_id=806115

JadeNB has asked for the wisdom of the Perl Monks concerning the following question:

Is it possible to perform a s///g substitution in such a way that the substituted text is itself recursively parsed? That is, can I mangle the code

$_ = 'ab'; s/^(a{1,3})(?=b)/$1a/g; # => $_ = 'aab'
so that I wind up instead with $_ = 'aaaab'? (I don't mean by taking $_ = 'aaab' to begin with, either. :-) )

The problem, as I understand it—and this is probably either over-simplified or blatantly wrong—is that pos is set to point just after the substitution; but something silly like setting pos manually doesn't seem to help either:

$_ = 'ab'; s/^(a{1,3})(?=b)/pos = 0, $1 . 'a'/eg; # still, $_ => 'aab'

UPDATE: By the way, I know that I could just do something like 1 while s///, but I'm curious—purely for academic reasons (or, really, if you must know, because of moritz)—if it can be done entirely inside the regex itself; that is, if regexes can provide the necessary control structure. (Sorry, I unfairly added this while bobf and ikegami were replying.)