Броское 'x' использование в жемчуге

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

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

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

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

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

Любое объяснение ценилось бы.

5
задан Jonathan Leffler 30 June 2010 в 14:38
поделиться

3 ответа

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

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

18
ответ дан 18 December 2019 в 05:48
поделиться

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

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

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

Ваш пример очень короткий (все, что он говорит, это если первая буква строки начинается с «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
6
ответ дан 18 December 2019 в 05:48
поделиться

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

5
ответ дан 18 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: