Existe una mejor manera de escribir expresiones regulares de Perl con / x para que el código siga siendo fácil de leer?

Ejecuté Perl :: Critic en uno de mis scripts, y recibí este mensaje:

Regular expression without "/x" flag at line 21, column 26. See page 236 of PBP.

Busqué la información de la políticaaqu, y entiendo que escribir expresiones regulares en modo extendido ayudará a cualquiera que esté mirando el código.

Sin embargo, estoy atascado en cómo convertir mi código para usar la bandera / x.

CPAN Ejemplo:

# 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;

Esto tiene sentido si solo miras la expresión regular.

Mi código

if ($line =~ /^\s*package\s+(\S+);/ ) {

No estoy exactamente seguro de cómo usar una expresión regular extendida dentro de una declaración if. Puedo escribirlo así:

    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
      )
    {

Y esto funciona, pero creo que es casi más difícil de leer que el original. ¿Hay una mejor manera (o una mejor práctica) para escribir esto? Supongo que podría crear una variable usando qr //

Realmente no estoy buscando consejos para volver a escribir esta expresión regular específica (aunque si puedo mejorarla, tomaré consejos). Estoy más buscando consejos sobre cómo expandir una expresión regular dentro de una declaración if. @

Sé que Perl :: Critic es solo una guía, pero sería bueno seguirla.

¡Gracias por adelantado

EDITAR Entonces, después de recibir algunas respuestas, se hizo evidente para mí que hacer una regex de varias líneas con comentarios no siempre es necesario. Las personas que entienden la expresión regular básica deberían poder entender lo que estaba haciendo mi ejemplo: los comentarios que agregué fueron quizás un poco innecesarios y detallados. Me gusta la idea de usar la bandera de expresiones regulares extendida, pero aún incrustar espacios en la expresión regular para que cada parte de la expresión regular sea un poco más clara. ¡Gracias por todos los aportes!

Respuestas a la pregunta(10)

Su respuesta a la pregunta