Existe uma maneira melhor de escrever expressões regulares Perl com / x para que o código ainda seja fácil de le
Corri o Perl :: Critic em um dos meus scripts e recebi a seguinte mensagem:
Regular expression without "/x" flag at line 21, column 26. See page 236 of PBP.
Procurei as informações da políticaaqu, e entendo que escrever expressões regulares no modo estendido ajudará quem estiver olhando o códig
No entanto, eu estou preso como converter meu código para usar o sinalizador /
CPAN Exemplo:
# 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;
Isso faz sentido se você apenas olhar para o regex.
My Code:
if ($line =~ /^\s*package\s+(\S+);/ ) {
Não sei exatamente como usar uma regex estendida dentro de uma instrução if. Eu posso escrever assim:
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
)
{
E isso funciona, mas acho que isso é quase mais difícil de ler do que o original. Existe uma maneira melhor (ou melhor) de escrever isso? Eu acho que eu poderia criar uma variável usando qr //
Na verdade, não estou procurando conselhos sobre como reescrever esse regex específico (embora, se eu puder melhorá-lo, aceitarei conselhos) - estou procurando mais conselhos sobre como expandir um regex dentro de uma instrução if.
Sei que Perl :: Critic é apenas uma diretriz, mas seria bom segui-la.
Desde já, obrigado
EDITAR Então, depois de receber algumas respostas, ficou claro para mim que nem sempre é necessário fazer uma linha múltipla regex com comentários. As pessoas que entendem o regex básico devem entender o que meu exemplo estava fazendo - os comentários que adicionei foram talvez um pouco desnecessários e detalhados. Eu gosto da ideia de usar o sinalizador de regex estendido, mas ainda incorporar espaços no regex para tornar cada parte do regex um pouco mais clara. Obrigado por toda a entrada!