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.)
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.