I omitted the /g on the regex in the sample code, but the working code has it.<br><br>The working code would deal with more complex patterns using a combination of letters, numbers and special characters, for example MAC/IP addresses, hostnames, etc.  It could be any pattern of characters really, but they would have to be replaced in the same way that Mike suggested, where the surrounding data is not affected.<br>
<br><br><br><div class="gmail_quote">On Wed, Dec 22, 2010 at 12:54 PM, J Z Tam <span dir="ltr">&lt;<a href="mailto:jztam@yahoo.com">jztam@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">
I&#39;m with Richard:<br>Why not just tr the line?<br>  DB&lt;1&gt;<br>main::(bobbyRegex1.pl:10):      my $line = &quot;*!*!* a *!*!* b *!*!* c *!*!*&quot;;<br><br>  DB&lt;1&gt;<br>main::(bobbyRegex1.pl:14):      my $pattern = &#39;(a)+\s.*(b)+\s.*(c)+\s&#39;; # kinda/<div class="im">
<br>sorta, replaces stuff between patterns also<br><br></div>  DB&lt;1&gt; $expectedMatches = $line =~ tr/abc/def/;<br><br>  DB&lt;3&gt; x $expectedMatches<br>0  3<br><br>  DB&lt;4&gt; x $line<br>0  &#39;*!*!* d *!*!* e *!*!* f *!*!*&#39;<br>
<br>  DB&lt;5&gt;<br><br>--- On <b>Wed, 12/22/10, Richard Dice <i>&lt;<a href="mailto:richard.dice@gmail.com" target="_blank">richard.dice@gmail.com</a>&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">
<br>From: Richard Dice &lt;<a href="mailto:richard.dice@gmail.com" target="_blank">richard.dice@gmail.com</a>&gt;<br>Subject: Re: [tpm] Search/Replace
 multiple patterns in a single line, in a single pass?<br>To: &quot;J. Bobby Lopez&quot; &lt;<a href="mailto:jbl@jbldata.com" target="_blank">jbl@jbldata.com</a>&gt;<br>Cc: &quot;Toronto Perl Mongers&quot; &lt;<a href="mailto:tpm@to.pm.org" target="_blank">tpm@to.pm.org</a>&gt;<br>
Received: Wednesday, December 22, 2010, 12:20 PM<div><div></div><div class="h5"><br><br><div>Two thoughts.<br><br>Why aren&#39;t you using the &#39;global&#39; switch on the substitution, like s///g ?<br><br>Second, if the substitutions in your real code are as simple as in your example code, you should consider the transliterate operator rather than the substitution operator, per $foo =~ tr///;<br>
<br>Sent from my iPhone<br><br>On 2010-12-22, at 10:44 AM, &quot;J. Bobby Lopez&quot; &lt;<a href="http://mc/compose?to=jbl@jbldata.com" target="_blank">jbl@jbldata.com</a>&gt; wrote:<br><br>&gt; Hey all,<br>&gt; <br>&gt; I&#39;m trying to figure something out, but having some trouble.  I&#39;m trying to replace multiple patterns via capture buffers, with multiple replacements contained in a hash.<br>
&gt; <br>&gt; Looking at the
 code below, you can see that the patterns I&#39;d like to match are contained in $regex just fine, however I&#39;d like to have mutiple $replacement{$#} &#39;s depending on the number of patterns I&#39;m trying to replace.<br>
&gt; <br>&gt; ==== begin-code ===<br>&gt; #!/usr/bin/env perl<br>&gt; use strict;<br>&gt; use warnings;<br>&gt; <br>&gt; my %replacement;<br>&gt; $replacement{&#39;a&#39;} = &#39;d&#39;;<br>&gt; $replacement{&#39;b&#39;} = &#39;e&#39;;<br>
&gt; $replacement{&#39;c&#39;} = &#39;f&#39;;<br>&gt; <br>&gt; my $line = &quot;*!*!* a *!*!* b *!*!* c *!*!*&quot;;<br>&gt; <br>&gt; #my $pattern = &#39;(a)|(b)|(c)&#39;; # Doesn&#39;t work, only matches first pattern<br>
&gt; my $pattern = &#39;(a).*(b).*(c)&#39;; # kinda/sorta, replaces stuff between patterns also<br>&gt; <br>&gt; #$line =~ s/$pattern/$replacement{$1}/; # &lt;-- here&#39;s where I&#39;m having difficulty<br>&gt; $line =~ s/$pattern/$replacement{$1} $replacement{$2} $replacement{$3}/; # kinda/sorta<br>
&gt; <br>&gt; #$line =~ m/$pattern/;<br>&gt; #print &quot;$1, $2, $3\n&quot;;<br>&gt;
 <br>&gt; print $line.&quot;\n&quot;;<br>&gt; ==== end-code ===<br>&gt; <br>&gt; <br>&gt; Either I&#39;m missing something, or this isn&#39;t actually possible, and I&#39;ll have to loop through the patterns and replace them individually.<br>
&gt; <br>&gt; Thoughts?<br>&gt; <br>&gt; -Bobby<br>&gt; _______________________________________________<br>&gt; toronto-pm mailing list<br>&gt; <a href="http://mc/compose?to=toronto-pm@pm.org" target="_blank">toronto-pm@pm.org</a><br>
&gt; <a href="http://mail.pm.org/mailman/listinfo/toronto-pm" target="_blank">http://mail.pm.org/mailman/listinfo/toronto-pm</a><br>_______________________________________________<br>toronto-pm mailing list<br><a href="http://mc/compose?to=toronto-pm@pm.org" target="_blank">toronto-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/toronto-pm" target="_blank">http://mail.pm.org/mailman/listinfo/toronto-pm</a><br></div></div></div></blockquote></td></tr></tbody></table><br></blockquote></div><br>