[SP-pm] Problema com substituição

Eden Cardim edencardim em gmail.com
Quinta Agosto 3 17:41:24 PDT 2006


On 8/3/06, Roberto Maluhy Junior <maluhy em gmail.com> wrote:
>
> Gostaria de fazer algo como:
> -----
> $_ = "O gado roeu a roupa do rei de roma";
> $correto = "gato";
> $match = '^(.*?)(gado)(.*?)$';
> $subs = '$1' . $correto . '$2';
> s/$match/$subs/g;
> -----
> O resultado deste ultimo caso eh
> "$1gato$2"
<snip>
> Como posso fazer os $1 $2 ... que estao num scalar ($subs neste caso)
> serem considerados como variaveis e nao como strings na regexp??

Vc pode usar a opção '/e' seguida de outro 'e' para avaliar a
expressão dentro de um eval antes de re-executar o código isso te dá o
poder de executar qualquer código em Perl e usar o valor de retorno
como expressão de substituição. Mais detalhes em perldoc perlop
(http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators-operator%2c-regexp)

<code>
$_ = "O gado roeu a roupa do rei de roma";
$correto = "gato";
$match = qr/^(.*?)gado(.*?)$/;
$subs = q{ $1 . $correto . $2 };
s/$match/$subs/ee;
print;
</code>


Mais detalhes sobre a lista de discussão SaoPaulo-pm