Прикольное использование x в perl - PullRequest
5 голосов
/ 30 июня 2010

Обычно я использовал 'x':

print("#" x 78, "\n");

, который объединяет 78 раз строку "#".Но недавно я наткнулся на этот код:

while (<>) { print if m{^a}x }

, который печатает каждую строку ввода, начинающуюся с «а».Я понимаю часть соответствия регулярному выражению (m {^ a}), но я действительно не вижу, что здесь делает этот 'x'.

Ответы [ 3 ]

18 голосов
/ 30 июня 2010

Это модификатор для регулярного выражения. Модификатор x указывает Perl игнорировать пробелы и комментарии внутри регулярного выражения.

В вашем примере кода это не имеет значения, потому что в регулярном выражении нет пробелов или комментариев.

6 голосов
/ 30 июня 2010

«x» в вашем первом случае - это оператор повторения, который принимает строку в качестве левого аргумента и количество повторений в качестве правого аргумента. Perl6 может реплицировать списки, используя оператор повторения "xx".

Ваш второй пример использует регулярное выражение m{^a}x. Хотя вы можете использовать много разных типов разделителей, неофиты могут использовать знакомую нотацию, которая использует косую черту: m/^a/x

"x" в регулярном выражении называется модификатором или флагом и является лишь одним из многих необязательных флагов, которые можно использовать. Он используется для игнорирования пробелов в шаблоне регулярных выражений, но также позволяет использовать обычные комментарии внутри. Поскольку шаблоны регулярных выражений могут быть очень длинными и запутанными, использование пробелов и комментариев очень полезно.

Ваш пример очень короткий (все, что он говорит, это если первая буква строки начинается с "a"), поэтому вам, вероятно, не понадобятся пробелы или комментарии, но вы могли бы, если хотите.


Пример:

m/^a     # first letter is an 'a'  
         # <-- you can put more regex on this line because whitespace is ignored
         # <-- and more here if you want
 /x
5 голосов
/ 30 июня 2010

В этом случае использования «x» является модификатором регулярного выражения, который «расширяет читабельность вашего шаблона, разрешая пробелы и комментарии». согласно документации perl. Однако здесь это кажется излишним

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