Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: line by line match on an array of strings

by jbert (Priest)
on Jan 09, 2008 at 10:42 UTC ( #661306=note: print w/replies, xml ) Need Help??

in reply to line by line match on an array of strings

You might get some minor joy by:
  • Compiling your regexps and saving them. See qr in perldoc perlop.
  • If each line can only match one of these typedefs, make sure you exit the typedef loop when you find a match.
  • In combination with the previous, if you have some typedefs which are more likely to occur, order the typedefs array with the most likely at the front (for early exit).
In combination:
my @typedefs = qw(...sorted list of typedefs, common ones first...); my @regexes = map { qr{$_} } @typedefs; REGEX: foreach my $regex (@regexes) { if ($line =~ $regex) { # found typedef so do work last REGEX; # Stop looking } }
Ah...if you want to perform the same action, you can munge all your typedefs together into one regex.
my @typedefs = qw(...sorted list of typedefs, common ones first...); # Make a big '(a|b|c|...)' regex str # Should probably do some quoting here. my $regexStr = "(" . join("|", @typedefs) . ")"; my $regex = qr{$regexStr}; if ($line =~ $regex) { # found typedef so do work }
That should help a bit, since you're now handling all the alternatives in the regex engine, i.e. looping in C not perl.

UPDATE: in case it's not obvious, you want to produce the @regex array or $regex once, before looping through all your lines. Don't do it per line :-)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://661306]
[karlgoethebier]: Corion: "...didn't leave business cards" Those guys came from Muränia?
[Corion]: karlgoethebier: Heh - naah, I think they are just very fresh out of university. At least they seem to have hired one person as key accountant who has done enterprise consulting etc. before :)
[Corion]: erix: It wouldn't be nice of me to publically shame and name ;)
[Corion]: I'm interested in how their product actually works. It uses websockets between two non-browser components, so there are some weird technology decisions, or rather, I assume the product started out as something completely different :)
[erix]: fair enough

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (10)
As of 2018-04-19 12:25 GMT
Find Nodes?
    Voting Booth?