I didn't like the use of $_ to build a pattern, just as a matter of taste. I figure if you're going to localize a variable for this, make it the auto-joiner, taking advantage of the fact that regex context is double-quotish for variable interpolation (it would make sense to me if Perl magically set $" for array interpolation):
my $joined = do {
local $" = '|';
qr/@pats/;
};
though I'd likely do it like this:
my $joined = qr/${\join '|', @pats}/;
Caution: Contents may have been coded under pressure.