2012-09-14 17 views
5

El Perl estados doc:¿Cómo usar el indicador/r en Perl regex?

e Evaluate 'replacement' as an expression 
r Return substitution and leave the original string untouched. 

son banderas disponibles para ser utilizados en los patrones de sustitución. Cuando paso el indicador r a mi patrón de sustitución, se interpreta como un error de sintaxis. Estoy ejecutando Perl 5.8.8. ¿Es posible que no sea compatible con mi versión de Perl? Además, ¿puede alguien proporcionar un ejemplo práctico de cómo usar la bandera y cómo llamar al reemplazo creado recientemente?

Respuesta

15

¿Quizás debería leer los documentos para 5.8.8, entonces?/r fue agregado a 5.14!

En 5.8.8, que ha de hacer el equivalente de

s/foo/bar/r 

con

do { (my $s = $_) =~ s/foo/bar/; $s } 

usos de muestra de s /// r:

print "abba" =~ s/b/!/rg;   # Prints a!!a 

my $new = $old =~ s/this/that/r; # Leaves $old intact. 

my $trimmed = $val =~ s/^\s+//r =~ s/\s+\z//r; 
my $trimmed = (($val =~ s/^\s+//r) =~ s/\s+\z//r); # Same as previous 
+0

Podría usted mostrar cómo llamarlo en 5.14. Estoy confundido sobre cómo devuelve una variable diferente, pero todavía tiene que anotar la variable para ejecutarla. Por ejemplo: $ var = ~ s/this/that/r; ¿Dónde se guarda la nueva variable? – user1671989

+0

@ user1671989, se devuelve. «' Imprimir "abc" = ~ s/b /!/Rg; '» impresiones «' a! C' ». – ikegami

+0

Entonces, si se devuelve y lo llamé como $ var = ~ s/this/that/r; ¿de hecho sobrescribiría $ var? ¿Cómo puedo ejecutarlo en $ var y devolverlo a $ new_var? Perdón por ser un novato, teniendo problemas para entenderlo. – user1671989