Почему круглые скобки так важны при назначении этого соответствия регулярному выражению? - PullRequest
4 голосов
/ 06 сентября 2010

У меня есть кусок кода:

$s = "<sekar kapoor>";
($name) = $s =~ /<([\S\s]*)>/;
print "$name\n";               # Output is 'sekar kapoor'

Если скобки удалены во второй строке кода, как это, в переменной $name:

$name = $s =~ /<([\S\s]*)>/;   # $name is now '1'

Iне понимаю, почему он так себя ведет.Может кто-нибудь объяснить, почему это так?

1 Ответ

8 голосов
/ 06 сентября 2010

В первом примере у вас есть контекст списка слева (вы использовали круглые скобки); во втором у вас есть скалярный контекст - у вас просто есть скалярная переменная.

См. Документы Perl для цитатных операций , Соответствие в контексте списка :

Если опция /g не используется, m// in Контекст списка возвращает список, состоящий из подвыражений, сопоставленных круглые скобки в шаблоне, т.е. ($1 , $2 , $3 ...).
(Обратите внимание, что здесь $1 и т.д. также установлены, и что это отличается от поведения Perl 4.)
Когда в скобках нет шаблон, возвращаемое значение является список (1) для успеха. С или без скобки, пустой список возвращается при неудаче.

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