Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re: Merged list with regex matches

by ikegami (Patriarch)
on Sep 04, 2007 at 15:51 UTC ( [id://636968]=note: print w/replies, xml ) Need Help??

in reply to Merged list with regex matches

Fundametally you will need two nested loops, even if they are not obviously visible. (e.g. One could be hidden in a regexp.) However, it is possible to optimise the loops.

Possible optimisation one: Don't compile the same regexp over and over again:

for my $bn ( @B_CHECKS ) { my $re = qr/^(?:0|5|6)0+\Q$bn\E$/; for my $cn ( @CS_CHECKS ) { if ( $cn =~ $re ) { print "$bn = $cn\n"; } } }

Possible optimisation two: Create a single regexp:

my ($re) = map qr/^(?:0|5|6)0+($_)$/, join '|', map quotemeta, @B_CHECKS; for my $cn ( @CS_CHECKS ) { if ( $cn =~ $re ) { print "$1 = $cn\n"; } }

Possible optimisation three: Create a single regexp using Regexp::List

use Regexp::List qw( ) my $re = Regexp::List->new->list2re(@B_CHECKS); $re = qr/^(?:0|5|6)0+($re)$/; for my $cn ( @CS_CHECKS ) { if ( $cn =~ $re ) { print "$1 = $cn\n"; } }

Possible optimisation four: Get rid of the regexp entirely, and do hash lookups. This will only work (as is) if $bn will never match /^(?:0|5|6)0+/.

my %B_CHECKS = map +($_ => 1), @B_CHECKS; for my $cn ( @CS_CHECKS ) { (my $bn = $cn) =~ s/^(?:0|5|6)0+//; if ( $B_CHECKS{$bn} ) { print "$bn = $cn\n"; } }

Update: Added #3

Replies are listed 'Best First'.
Re^2: Merged list with regex matches
by tcf03 (Deacon) on Sep 04, 2007 at 16:35 UTC
    #4 Looks like what I need, I will need to double check that $bn will not match /^(0|5|6)0+/ These lists are fairly large so no matter what I do, Its going to be tough to speed up.
    "That which we persist in doing becomes easier, not that the task itself has become easier, but that our ability to perform it has improved."
      --Ralph Waldo Emerson

Log In?

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2024-04-23 21:47 GMT
Find Nodes?
    Voting Booth?

    No recent polls found