• Publicidad

Ayuda con "tr"

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Ayuda con "tr"

Notapor DRGS__ » 2010-10-24 08:52 @411

Hola, primeramente, felicidades por el foro, le he echado un vistazo y está muy bueno.

Verán, ando aprendiendo Perl, y estoy haciendo un pequeño script para practicar "tr" que lo que hace es reemplazar un carácter por otro.

Imaginados que tengo:


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! usr/bin/perl
  2. $string=<STDIN>;
  3. print "\n $string = ";
  4. $string=~ tr/hola/adios/;
  5. print "$string";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Este código se supone que reemplazaría si encuentra la cadena 'hola' por 'adios'. Pero ¿y si yo necesito hacer algo más "complejo"? es decir, reemplazar más de unos carácteres, para no estar escribiendo todo el rato:
$string=~ tr/hola/adios/;
$string=~ tr/adios/hola/;
$string=~ tr/como/estas/;
$string=~ tr/bien/mal/;

¿hay alguna forma para no ponerlo todo así y juntarlo todo en una misma línea?

Por cierto, ¿cómo se haría para que no diferencie entre mayúsculas y minúsculas?

Muchas gracias, y espero que me hayan entendido ya que no me explico muy bien :$

Saludos :)
DRGS__
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-10-24 08:45 @406

Publicidad

Re: Ayuda con "tr"

Notapor explorer » 2010-10-24 09:19 @429

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í:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. use warnings;
  5. use diagnostics;
  6.  
  7. my $string = 'Hola, amigo. ¿Cómo estás? Espero que, como siempre, estés bien';
  8.  
  9. say $string;              # Hola, amigo. ¿Cómo estás? Espero que, como siempre, estés bien
  10.  
  11. $string =~ s/adios/hola/i;
  12. $string =~ s/hola/adios/i;
  13. $string =~ s/cómo/estás/i;
  14. $string =~ s/bien/mal/i;
  15.  
  16. say $string;              # adios, amigo. ¿estás estás? Espero que, como siempre, estés mal
  17.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

se podría reducir a:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use 5.010;
  3. use strict;
  4. use warnings;
  5. use diagnostics;
  6.  
  7. my $string = 'Hola, amigo. ¿Cómo estás? Espero que, como siempre, estés bien';
  8.  
  9. my %reemplazos = (
  10.     'adios' => 'hola',
  11.     'hola'  => 'adios',
  12.     'cómo'  => 'estás',
  13.     'bien'  => 'mal',
  14. );
  15.  
  16. say $string;
  17.  
  18. for my $cambio (keys %reemplazos) {
  19.     $string =~ s/$cambio/$reemplazos{$cambio}/gi;
  20. }
  21.  
  22. say $string;
Coloreado en 0.002 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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda con "tr"

Notapor DRGS__ » 2010-10-24 09:52 @453

Muchísimas gracias, mi duda, fue solucionada.

Cualquier otra duda, no dudaré en pasarme por aquí (?) xD

¡ Saludos ! :D
DRGS__
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2010-10-24 08:45 @406


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 16 invitados

cron