Perl модификатор регулярных выражений - PullRequest
1 голос
/ 19 июля 2011

Что делает следующий модификатор регулярного выражения Perl?

/o

Например,

$string =~ /foo\(\"([^\)]*)\"\)/o)   

Что означает /o?

Ответы [ 3 ]

6 голосов
/ 19 июля 2011

Это говорит Perl, чтобы скомпилировать выражение только один раз. См. Для чего действительно нужен / o? .

5 голосов
/ 19 июля 2011

Абсолютно ничего!

Это влияет на интерполяцию, и ничто не интерполируется в этот шаблон.

Если бы что-то интерполировалось, / o приведет к тому, что интерполяция произойдет только один раз, независимо от того, сколько раз выполняется оператор сопоставления.

>perl -E"for (['o','foo'],['a','bar'],['e','neo']) {
    my ($pat, $s) = @$_; say $s =~ /$pat/ ? $& : 0 }"
o
a
e

>perl -E"for (['o','foo'],['a','bar'],['e','neo']) {
    my ($pat, $s) = @$_; say $s =~ /$pat/o ? $& : 0 }"
o
0
o
5 голосов
/ 19 июля 2011

Опция / o для регулярных выражений (задокументировано в perlop и perlreref) указывает Perl компилировать регулярное выражение только один раз. Это полезно только тогда, когда шаблон содержит переменную. Perls 5.6 и более поздние версии обрабатывают это автоматически, если шаблон не меняется.

( источник )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...