Ответ 1
Для литералов (статических) регулярных выражений нечего делать - perl будет компилировать их только один раз.
if ($var =~ /foo|bar/) {
# ...
}
Для регулярных выражений, хранящихся в переменных, у вас есть пара опций. Вы можете использовать оператор qr//
для создания объекта регулярного выражения:
my $re = qr/foo|bar/;
if ($var =~ $re) {
# ...
}
Это удобно, если вы хотите использовать регулярное выражение в нескольких местах или передать его подпрограмм.
Если шаблон регулярного выражения находится в строке, вы можете использовать параметр /o
, чтобы обещать perl, что он никогда не изменится:
my $pattern = 'foo|bar';
if ($var =~ /$pattern/o) {
# ...
}
Обычно лучше не делать этого. Perl достаточно умен, чтобы знать, что переменная не изменилась, и регулярное выражение не нужно перекомпилировать. Указание /o
, вероятно, является преждевременной микрооптимизацией. Это также потенциальная ловушка. Если переменная изменилась с помощью /o
, это приведет к тому, что perl будет использовать старое regex. Это может привести к затруднению диагностики ошибок.