Bienvenido a los foros de Perl en Español, DRGS__.
El comando tr/// no realiza un reemplazo, sino una "transliteración".
Quiere decir que en
$string=~ tr/hola/adios/;, en el $string, cada 'h' es cambiada por una 'a'. cada 'o' por una 'd'. Cada 'l' por una 'i'. Y cada 'a' por una 'o'.
Para hacer sustituciones (reemplazos) de cadenas de caracteres, se usa el comando s/// (más información en perlop).
Así,
$string =~ s/hola/adios/; sí que hará lo que pides.
Sí que es posible realizar una sustitución múltiple en función de la cadena a sustituir, pero estaríamos hablando de meter las cadenas a sustituir como claves de un
hash, y los nuevos valores serían los valores de ese
hash.
Algo así:
Using perl Syntax Highlighting
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use diagnostics;
my $string = 'Hola, amigo. ¿Cómo estás? Espero que, como siempre, estés bien';
say $string; # Hola, amigo. ¿Cómo estás? Espero que, como siempre, estés bien
$string =~ s/adios/hola/i;
$string =~ s/hola/adios/i;
$string =~ s/cómo/estás/i;
$string =~ s/bien/mal/i;
say $string; # adios, amigo. ¿estás estás? Espero que, como siempre, estés mal
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
se podría reducir a:
Using perl Syntax Highlighting
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use diagnostics;
my $string = 'Hola, amigo. ¿Cómo estás? Espero que, como siempre, estés bien';
my %reemplazos = (
'adios' => 'hola',
'hola' => 'adios',
'cómo' => 'estás',
'bien' => 'mal',
);
say $string;
for my $cambio (keys %reemplazos) {
$string =~ s/$cambio/$reemplazos{$cambio}/gi;
}
say $string;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
La opción /g es para hacer la sustitución todas las veces que pudieran ocurrir a lo largo del $string, mientras que /i indica que no distinga entre mayúsculas y minúsculas.
Más información en perlop y perlre.