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).
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...); my @regexes = map { qr{$_} } @typedefs; REGEX: foreach my $regex (@regexes) { if ($line =~ $regex) { # found typedef so do work last REGEX; # Stop looking } }
That should help a bit, since you're now handling all the alternatives in the regex engine, i.e. looping in C not perl.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 }
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 :-)
|
---|
In Section
Seekers of Perl Wisdom