[SP-pm] Dúvida sobre $1 em percorrer linhas.

Nelson Ferraz nferraz at gmail.com
Sun Sep 28 11:11:10 PDT 2008


> O Gabriel me mandou estudar algumas coisas e olha ->
> m#</strong><br><i>\((.+?)\)</i></td>#ig && print DATA $1,$/ foreach
> split("$/",$data->content());

Alguns comentários:

1) Se você quer mesmo usar o loop, pelo menos tente escrever um código
mais legível, como por exemplo:

foreach ( split("\n",$data->content()) ) {
    if ( m{</strong><br><i>  \(  (.+?)  \)  </i></td>}igx ) {
        print DATA "$1\n";
    }
}

One-liners como o que você escreveu podem ser úteis para obfuscar seu
código, mas são péssimos quando encontrados em código de produção.

2) A opção de regexp para tratar a string como uma única linha é o /s
, e está na documentação que eu indiquei. Se você tivesse lido a
documentação ao invés de continuar insistindo em perguntar fora da
lista, talvez tivesse chegado a algo como:

    my @values = $content =~ m{</strong><br><i>  \(  (.+?)  \)  </i></td>}igsx;

3) Várias pessoas já te disseram para não usar expressões regulares
quando você pode usar um parser.


More information about the SaoPaulo-pm mailing list