Página 1 de 1

Reducir código

NotaPublicado: 2014-05-22 18:38 @818
por BigBear
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 ?

Re: Reducir código

NotaPublicado: 2014-05-22 18:44 @822
por explorer
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

Re: Reducir código

NotaPublicado: 2014-05-23 11:11 @508
por BigBear
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 ?

Re: Reducir código

NotaPublicado: 2014-05-23 12:52 @577
por explorer
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.