Я запустил Perl :: Critic на одном из моих скриптов и получил это сообщение:
Regular expression without "/x" flag at line 21, column 26. See page 236 of PBP.
Я посмотрел информацию о политике здесь , и я понимаю, что написание регулярных выражений в расширенном режиме поможет всем, кто смотрит на код.
Однако я застрял в том, как конвертировать мой код, чтобы использовать флаг / x.
CPAN Пример:
# Match a single-quoted string efficiently...
m{'[^\\']*(?:\\.[^\\']*)*'}; #Huh?
# Same thing with extended format...
m{
' # an opening single quote
[^\\'] # any non-special chars (i.e. not backslash or single quote)
(?: # then all of...
\\ . # any explicitly backslashed char
[^\\']* # followed by an non-special chars
)* # ...repeated zero or more times
' # a closing single quote
}x;
Это имеет смысл, если вы посмотрите только на регулярное выражение.
Мой код:
if ($line =~ /^\s*package\s+(\S+);/ ) {
Я не совсем уверен, как использовать расширенное регулярное выражение внутри оператора if. Я могу написать это так:
if (
$line =~ /
^\s* # starting with zero or more spaces
package
\s+ # at least one space
(\S+) # capture any non-space characters
; # ending in a semi-colon
/x
)
{
И это работает, но я думаю, что это почти сложнее читать, чем оригинал. Есть ли лучший способ (или лучший способ), чтобы написать это? Я думаю, я мог бы создать переменную, используя qr //.
Я на самом деле не ищу совета по переписыванию этого конкретного регулярного выражения (хотя, если я смогу улучшить его, я приму совет) - я больше ищу совет о том, как расширить регулярное выражение внутри if заявление.
Я знаю, Perl :: Critic - это просто руководство, но было бы неплохо следовать ему.
Заранее спасибо!
EDIT:
Поэтому после получения нескольких ответов мне стало ясно, что создание регулярного выражения с комментариями не всегда необходимо. Люди, которые разбираются в базовых регулярных выражениях, должны понимать, что делает мой пример - комментарии, которые я добавил, были, возможно, немного ненужными и многословными. Мне нравится идея использования расширенного флага регулярных выражений, но все же встраивание пробелов в регулярное выражение, чтобы сделать каждую часть регулярного выражения немного более понятной.
Спасибо за весь вклад!