Как примечание, синтаксис (?FLAGS:pattern)
претерпел изменения в perl 5.14.0, и вместе с ним изменилось регулярное выражение.Процитируем из perlre
:
Начиная с Perl 5.14, сразу после «?» Стоит знак «^» (акцент или акцент).является сокращенным эквивалентом "d-imsx".Флаги (кроме "d") могут следовать за кареткой, чтобы переопределить ее.Но знак минус с ним недопустим.
(d
- это одна из группы новых флагов в 5.14, которая влияет на то, как Unicode влияет на регулярные выражения; d
, значение по умолчанию, означаетдействовать в основном как старые версии Perl).
С добавлением синтаксиса (?^FLAGS:pattern)
строковое выражение regex изменяется в соответствии с этим синтаксисом и перечисляет только те флаги, которые отличаются от значений по умолчанию.Так qr/hello/
преобразуется в (?^:hello)
(ранее (?-xism:hello)
), а qr/hello/i
преобразуется в (?^i:hello)
(ранее (?i-xsm:hello)
).
Преимущество этого изменения заключается в том, что если Perl 5.16 добавитьновый модификатор q
regex (для "запуска этого совпадения на квантовом компьютере") qr/hello/
не нужно будет изменять для преобразования в (?d-xismq:hello)
- он сможет оставаться (?^:hello)
таким, как на 5.14.