use Regexp::Assemble;
my $regex = Regexp::Assemble->new->add(@patterns)->ra;
... at the top of Aaron's (most excellent) suggestion. Although while on 5.8 this will be much faster, from 5.10 onwards it will be slower, so not much win. It would be much more so if the patterns were regular expressions themselves.
]]>