http://www.perlmonks.org?node_id=661306


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

You might get some minor joy by: 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 :-)