/Users/cpanrun/depot/main/contrib-patched/perl/CPAN/src/Regexp-Subst-Parallel/blib/html/site/lib/Regexp/Subst/Parallel.html


VERSION</pre> <p>Regexp::Subst::Parallel version 0.11, Feb 9, 2003.</p> <p> </p> <hr /> <h1><a name=``synopsis''>SYNOPSI/a</h1> <pre> <span class=``comment''># Rephrase $str into the form of a question.</span> <span class=``keyword''>my</span> <span class=``variable''>$qstr</span> <span class=``operator''>=</span> <span class=``variable''>subst</span><span class=``operator''>(</span><span class=``variable''>$str</span><span class=``operator''>,</span> <span class=``string''>qr/I|me/</span> <span class=``operator''>=&gt;</span> <span class=``string''>'you'</span><span class=``operator''>,</span> <span class=``string''>qr/my/</span> <span class=``operator''>=&gt;</span> <span class=``string''>'your'</span><span class=``operator''>,</span> <span class=``string''>qr/mine/</span> <span class=``operator''>=&gt;</span> <span class=``string''>'yours'</span><span class=``operator''>,</span> <span class=``string''>qr/you/</span> <span class=``operator''>=&gt;</span> <span class=``string''>'me'</span><span class=``operator''>,</span> <span class=``string''>qr/your/</span> <span class=``operator''>=&gt;</span> <span class=``string''>'my'</span><span class=``operator''>,</span> <span class=``string''>qr/yours/</span> <span class=``operator''>=&gt;</span> <span class=``string''>'mine'</span><span class=``operator''>,</span> <span class=``operator''>...);</span>


    <span class="comment"># Apply implicit html highlighting</span>
    <span class="keyword">my</span> <span class="variable">$html</span> <span class="operator">=</span> <span class="variable">subst</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span>
                   <span class="string">qr/\{(.*?)\}/</span> <span class="operator">=&gt;</span> <span class="string">'$1'</span><span class="operator">,</span>  <span class="comment"># Protect things in braces</span>
                   <span class="string">qr/_(\w+)_/</span>   <span class="operator">=&gt;</span> <span class="string">'&lt;u&gt;$1&lt;/u&gt;'</span><span class="operator">,</span>
                   <span class="string">qr/&lt;(\w+)&gt;/</span>   <span class="operator">=&gt;</span> <span class="string">'&lt;i&gt;$1&lt;/i&gt;'</span><span class="operator">,</span>
               <span class="operator">);</span>
</pre>
<pre>
    <span class="comment"># Toggle the case of every character</span>
    <span class="keyword">my</span> <span class="variable">$vAR</span> <span class="operator">=</span> <span class="variable">subst</span><span class="operator">(</span><span class="variable">$Var</span><span class="operator">,</span>
                  <span class="string">qr/([a-z]+)/</span> <span class="operator">=&gt;</span> <span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span> <span class="keyword">uc</span> <span class="variable">$_</span><span class="operator">[</span><span class="number">1</span><span class="operator">]</span> <span class="operator">},</span>
                  <span class="string">qr/([A-Z]+)/</span> <span class="operator">=&gt;</span> <span class="keyword">sub</span><span class="variable"> </span><span class="operator">{</span> <span class="keyword">lc</span> <span class="variable">$_</span><span class="operator">[</span><span class="number">1</span><span class="operator">]</span> <span class="operator">},</span>
              <span class="operator">);</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p><code>Regexp::Subst::Parallel</code> is a module that allows you to make
multiple simultaneous substitutions safely.  Using the sole exported
<code>subst</code> function has a rather different effect from doing each
substitution sequentially.  For example:</p>
<pre>
    <span class="variable">$text</span> <span class="operator">=</span> <span class="string">'{process_the_data} was _called_ without &lt;data&gt;!'</span><span class="operator">;</span>
    <span class="variable">$text</span> <span class="operator">=~</span> <span class="regex">s/\{(.*?)\}/$1/g</span><span class="operator">;</span>
    <span class="comment"># $text eq 'process_the_data was _called_ without &lt;data&gt;!'</span>
    <span class="variable">$text</span> <span class="operator">=~</span> <span class="regex">s/_(\w+)_/&lt;u&gt;$1&lt;/u</span><span class="operator">&gt;</span><span class="regex">/g;
    # </span><span class="variable">$text</span><span class="regex"> eq 'process&lt;u&gt;the&lt;/u</span><span class="operator">&gt;</span><span class="variable">data</span> <span class="variable">was</span> <span class="operator">&lt;</span><span class="variable">u</span><span class="operator">&gt;</span><span class="variable">called</span><span class="operator">&lt;/</span><span class="variable">u</span><span class="operator">&gt;</span> <span class="variable">without</span> <span class="operator">&lt;</span><span class="variable">data</span><span class="operator">&gt;!</span><span class="string">'
    $text =~ s/&lt;(\w+)&gt;/&lt;i&gt;$1&lt;/i&gt;/g;
    # $text eq '</span><span class="variable">process</span><span class="operator">&lt;</span><span class="variable">i</span><span class="operator">&gt;</span><span class="variable">u</span><span class="operator">&lt;/</span><span class="variable">i</span><span class="operator">&gt;</span><span class="variable">the</span><span class="operator">&lt;/</span><span class="variable">u</span><span class="operator">&gt;</span><span class="variable">data</span> <span class="variable">was</span> <span class="operator">&lt;</span><span class="variable">i</span><span class="operator">&gt;</span><span class="variable">u</span><span class="operator">&lt;/</span><span class="variable">i</span><span class="operator">&gt;</span><span class="variable">called</span><span class="operator">&lt;/</span><span class="variable">u</span><span class="operator">&gt;</span> <span class="variable">without</span> <span class="operator">&lt;</span><span class="variable">i</span><span class="operator">&gt;</span><span class="variable">data</span><span class="operator">&lt;/</span><span class="variable">i</span><span class="operator">&gt;!</span><span class="string">'
    </span>
</pre>
<p>Which is clearly the wrong result.  On the other hand,
<code>Regexp::Subst::Parallel</code> does them all in parallel, so:</p>
<pre>
    <span class="variable">$text</span> <span class="operator">=</span> <span class="string">'{process_the_data} was _called_ without &lt;data&gt;!'</span><span class="operator">;</span>
    <span class="variable">$text</span> <span class="operator">=</span> <span class="variable">subst</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span>
                <span class="string">qr/\{(.*?)\}/</span> <span class="operator">=&gt;</span> <span class="string">'$1'</span><span class="operator">,</span>  <span class="comment"># Protect things in braces</span>
                <span class="string">qr/_(\w+)_/</span>   <span class="operator">=&gt;</span> <span class="string">'&lt;u&gt;$1&lt;/u&gt;'</span><span class="operator">,</span>
                <span class="string">qr/&lt;(\w+)&gt;/</span>   <span class="operator">=&gt;</span> <span class="string">'&lt;i&gt;$1&lt;/i&gt;'</span><span class="operator">,</span>
            <span class="operator">);</span>
    <span class="comment"># $text eq 'process_the_data was &lt;u&gt;called&lt;/u&gt; without &lt;i&gt;data&lt;/i&gt;'</span>
</pre>
<p>Which seems to be right.</p>
<p>The algorithm moves from left to right, and the longest match is
substituted in case of conflict.  The substitution side of the pairs
can either be a string, in which non-backslashed $n's are substituted,
or a coderef, in which the sub is called and passed the list of
captures in @_.  $_[0] is analogous to $&amp; : it refers to the entire
match.</p>
<p>
</p>
<h2><a name="gotchas">Gotchas</a></h2>
<p>Make sure when you're using the string method to have the $'s included
in the string.  That means if you're using an interpolating quote (&quot;&quot;,
qq{}, etc.)  that you backslash $1, $2, etc.  Otherwise you will get
the $n's from the current lexical scope, which is not what you want.</p>
<p>
</p>
<h2><a name="caveats">Caveats</a></h2>
<p>To include a single backslash followed by an interpolated capture,
<code>subst</code> needs to see '\\$1', which means that you have to type
'\\\\$1' when you just want <em>a single backslash</em>.  That's sick.</p>
<p>
</p>
<hr />
<h1><a name="authors">AUTHORS</a></h1>
<p>Luke Palmer &lt;<a href="mailto:fibonaci@babylonia.flatirons.org";>fibonaci@babylonia.flatirons.org</a>&gt;</p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright (C) 2003 Luke Palmer.  This module is distributed under the
same terms as Perl itself.</p>
<pre>
    <a href="http://www.perl.com/perl/misc/Artistic.html";>http://www.perl.com/perl/misc/Artistic.html<;/a>
</pre>

</body>

</html>

 /Users/cpanrun/depot/main/contrib-patched/perl/CPAN/src/Regexp-Subst-Parallel/blib/html/site/lib/Regexp/Subst/Parallel.html