<?xml version="1.0" encoding="windows-1252"?>
<node id="636966" title="Re: Merged list with regex matches" created="2007-09-04 11:49:42" updated="2007-09-04 07:49:42">
<type id="11">
note</type>
<author id="106949">
Sidhekin</author>
<data>
<field name="doctext">
&lt;p&gt; On the assumption that every $cn will match at most one $bn (or that you don't care about more than the first), you could precompile a regex and use the result of the match: &lt;/p&gt;

&lt;code&gt;
#!/usr/bin/perl

use strict;
use warnings;

my @CS_CHECKS = ( '00012345', 'D123470', '0000123450', '0000023456', '50000123990' );
my @B_CHECKS = ( '1234', '12345', '123990', '12399' );

my $re = do { my $x = join '|', map "\Q$_", @B_CHECKS; qr/^[056]0+($x)$/ };

$_ =~ $re and print "$1 = $_\n" for @CS_CHECKS;
&lt;/code&gt;

&lt;p&gt; Of course, the regex engine is still run through the alternatives (up until one matches), but at least it &lt;em&gt;looks&lt;/em&gt; more elegant. :) &lt;/p&gt;

&lt;p&gt; (Oh, and it may be faster too, what with not having to recompile the regex again and again.  But don't quote me on that.) &lt;/p&gt;

&lt;div class="pmsig"&gt;&lt;div class="pmsig-106949"&gt;
&lt;p align=center&gt;
&lt;font size=-1&gt;&lt;code&gt;print "Just another Perl ${\(trickster and hacker)},"&lt;/code&gt;&lt;/font&gt;
&lt;br&gt;The Sidhekin &lt;b&gt;proves&lt;/b&gt; Sidhe did it!&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
636961</field>
<field name="parent_node">
636961</field>
</data>
</node>
