В perlre указано «Основы»
Шаблоны, которые еще не сохранены в какой-либо переменной, должны быть разделены на обоих концах символами-разделителями.
(вместе с ошибочным tt`)
Таким образом, шаблон в переменной просто не нуждается в разделителях.Оператор =~
, обсуждаемый в "Операторы связывания" в perlop
, привязывает скалярное выражение к сопоставлению с шаблоном.
и (с моимвыделение)
Если правильный аргумент является выражением, а не шаблоном поиска, подстановкой или транслитерацией, он интерпретируется как шаблон поиска во время выполнения.
Оператор не заботится о разделителях в правой части, и «выражение регулярного выражения» может быть сформировано во время выполнения из выражения.
Раздел "Gory детали синтаксического анализа цитируемых конструкций" в perlop также помогает в этом, кроме того, что освещает сам по себе.После идентификации цитируемой конструкции и интерполяции содержащегося в ней текста она попадает в пул "синтаксический анализ регулярных выражений"
После предварительной обработки, описанной выше ... результирующая строка передается вДвижок RE для компиляции.
(мой акцент)
Это общее обсуждение того, как Perl обрабатывает цитируемые конструкции, и нет необходимости в (дополнительных) разделителях после формирования строкииз цитируемой конструкции.m/RE/
(и т. Д.) Обсуждались ранее в пуле " interpolation ", который показывает некоторые вещи, которые нельзя использовать с простой строкой для шаблона, но это явно не обязательно дляиметь.
Я бы рекомендовал против этого, хотя;используйте qr
, как вы ожидаете.Во-первых, использование строки (а не регулярного выражения, созданного с qr
) является ограничением.Кроме того, это более склонно к глупым ошибкам.
Обратите внимание, что хотя для многих шаблонов , можно использовать qr
или ""
(или его операторную форму qq()
) для подготовки шаблона (или строки, котораябудет интерпретироваться таким образом) - они не одинаковы.Их правила цитирования довольно схожи, но qr
готовит регулярное выражение , которое, как указано в Операторы, подобные цитате Regexp
... магическиотличается от строки, содержащей те же символы ...
Напомним, что для qr
вы можете использовать модификаторы.