Página 1 de 1

Problema con Rot13

NotaPublicado: 2017-03-18 07:53 @370
por BigBear
Hola, estoy tratando de codificar en Rot13 una variable string, pero no puedo porque solo me devuelve el número 1 como resultado de la función :evil:

Este es el código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Crypt::Rot13;
  2.  
  3. my $php_code  = "echo 'hi world'; ?>";
  4.  
  5. print "Rot13 : ".encrypt_rot13($php_code)."\n\n";
  6.  
  7. sub encrypt_rot13 {
  8.   my $text = shift;
  9.   my $rot13 = new Crypt::Rot13;
  10.   $rot13->charge($text);
  11.   return $rot13->rot13();
  12. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿ Cuál es el problema ?

Re: Problema con Rot13

NotaPublicado: 2017-03-18 12:11 @549
por explorer
Lo que devuelve el método rot13() es una lista de elementos, así que debes tratarlo como tal.

Si has inicializado el objeto con un solo elemento, con charge(), entonces estamos hablando de una lista de un elemento. Y eso es lo que obtienes con rot13(): una lista de un elemento (el texto rotado), y eso es lo que devuelve la función encrypt_rot13: una lista de elementos de un solo elemento.

En el print de la línea 5, los operadores de concatenación obligan a tratar a los argumentos como escalares, y entonces la lista de elementos que devuelve encrypt_rot13 se trata en contexto escalar. Como solo hay un argumento, pues de ahí lo convierte en un '1', que es lo que estás viendo.

Entonces, lo que hay que hacer es tratar el resultado de encrypt_rot13() como una lista de elementos (tratarlo en contexto lista).

Esto es una forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Rot13 : " . join('' => encrypt_rot13($php_code)) . "\n\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El join() trata sus argumentos como listas. Otra forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "Rot13 : ", encrypt_rot13($php_code), "\n\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sencillamente, el print() también trata su lista de argumentos en contexto lista.

Re: Problema con Rot13

NotaPublicado: 2017-03-18 16:51 @743
por BigBear
¿ Un array ? No lo vi venir. Gracias por toda la ayuda, explorer.