Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Answer: How do i find $a and replace it with $b when it's preceded by $c?

by btrott (Parson)
on Jun 13, 2000 at 22:31 UTC ( #17945=categorized answer: print w/replies, xml ) Need Help??

Q&A > regular expressions > How do i find $a and replace it with $b when it's preceded by $c? - Answer contributed by btrott

<Editor's Note:>
Here is chromatic's post to which btrott is responding.

I prefer a simpler approach:

s/$c$a/$c$b/g; or s/($c)$a/$1$b/g;
Am I missing anything the lookbehind provides?

</Editor's Note>

All right... here's a benchmark of the two methods (lookbehind and just straight substitution). It looks like lookbehind is slightly faster, but not by a huge lot. Here's the code:

use Benchmark; use vars qw/$a $b $c/; ($a, $b, $c) = qw/bar baz foo/; timethese(shift || 1, { lookbehind => sub { local $_ = "foobarquux"; s/(?<=$c)$a/$b/g +}, chromatic => sub { local $_ = "foobarquux"; s/($c)$a/$1$b/g +}, });
And here are the benchmark results:
Benchmark: timing 500000 iterations of chromatic, lookbehind... chromatic: 15 wallclock secs (14.46 usr + 0.00 sys = 14.46 CPU) lookbehind: 13 wallclock secs (11.93 usr + 0.00 sys = 11.93 CPU)

Log In?

What's my password?
Create A New User
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2018-05-25 15:14 GMT
Find Nodes?
    Voting Booth?