Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^2: Chaining string ops

by Aristotle (Chancellor)
on Aug 28, 2003 at 18:08 UTC ( [id://287476]=note: print w/replies, xml ) Need Help??


in reply to Re: Chaining string ops
in thread Chaining string ops

You can get rid of the loop in your second example entirely.
my %subst_for = ( "walked" => "fed", "boy" => "girl", "dog" => "Audrey II" ); $_ = "the boy walked the dog"; my $alt = join '|', map quotemeta, keys %subs; s/($alt)/$subst_for{$1}/g;

Makeshifts last the longest.

Replies are listed 'Best First'.
Re: Re^2: Chaining string ops
by davido (Cardinal) on Aug 28, 2003 at 18:24 UTC
    Yes, you can do that, which creates a potentially huge alternation list for the regexp engine to swollow. I'm not sure that would be more efficient though, neither is it as clear.

    Alternation is a convenient tool inside a regexp, and I'm glad to see an example of how to make it work in the context of substituting multiple items with multiple substitute items.

    But alternation is also very inefficient, and can lead to a lot of backtracking even in relatively simple regular expressions. In that context, a loop may be more time efficient. Only benchmarking could say for sure.

    Dave

    "If I had my life to do over again, I'd be a plumber." -- Albert Einstein

      Yes, you can do that, which creates a potentially huge alternation list for the regexp engine to swollow. I'm not sure that would be more efficient though, neither is it as clear.

      Regex::PreSuf to the rescue!! It'll fix your efficiency problem, although it won't do much for readability :)
      --
      Mike

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://287476]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (5)
As of 2024-03-28 19:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found