If I define it in qr/(?:[.,:;] ?| )/ and use the variable in the regular expression ...
This does not directly address your performance concerns, but
when qr//-defined regex objects are interpolated into other regexes,
either qr//, m// or s///, the process is more or less like
string interpolation; the new regex does not somehow "call back" to the interpolated regex
as a subroutine call within another subroutine would do.
To get a feel for this process, write and run (with full warnings and strictures)
some code like the following, which just prints compiled regexes.
(This is untested because I can't provide a working example at the moment.)
Note that qr// automatically encapsulates its pattern in a (?:...)
non-capturing group that preserves the regex modifier flags,
so the non-capturing grouping within qr/(?:[.,:;] ?| )/ is redundant
(but does no harm); try it both ways.
my $foo = qr/[.,:;] ?| /;
print $foo, "\n";
my $bar = qr{ $foo+ (?: hic | hac | hoc) }xms;
print $bar, "\n";
my $baz = qr{ $bar{42} f[eio]e }xms;
print $baz, "\n";
Give a man a fish: <%-(-(-(-<
|