• Publicidad

Reducir código

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

Reducir código

Notapor BigBear » 2014-05-22 18:38 @818

Hola. Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2.  
  3. my $texto = "hola mundo chau";
  4.  
  5. $texto=~s/a/1/;
  6. $texto=~s/b/2/;
  7. $texto=~s/c/3/;
  8. $texto=~s/d/4/;
  9.  
  10. print $texto;
  11.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


La pregunta es si habría la forma de reducir 4 líneas de sustitución para que quede solo una línea.

¿ Se puede hacer ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Reducir código

Notapor explorer » 2014-05-22 18:44 @822

El comando tr/// (transliteración) es el recomendado, en estos casos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $texto = "hola mundo chau";
  2. $texto =~ tr/abcd/1234/;
  3.  
  4. say $texto;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Reducir código

Notapor BigBear » 2014-05-23 11:11 @508

explorer, ¿cómo hago para agregar 'ig' al final de la sustitución para que pueda detectar también las mayúsculas en tu script de ejemplo?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     $texto = "hola mundo chau";
  2.     $texto =~ tr/abcd/1234/ig;
  3.      
  4.     say $texto;
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿ Cómo lo hago ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Reducir código

Notapor explorer » 2014-05-23 12:52 @577

tr/// no tiene modificadores iguales a los del operador de sustitución o coincidencia.

No necesitas el modificador /g, porque tr/// hace la transliteración por toda la cadena.

Si quieres contemplar el caso de las mayúsculas, te vale con ponerlas:

$texto =~ tr/abcdABCD/12341234/;

Otra opción posible sería pasar antes el $texto a minúsculas, con lc(), y aplicar la primera transliteración.
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


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

cron