• Publicidad

Problema con Rot13

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

Problema con Rot13

Notapor BigBear » 2017-03-18 07:53 @370

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 ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Problema con Rot13

Notapor explorer » 2017-03-18 12:11 @549

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.
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: Problema con Rot13

Notapor BigBear » 2017-03-18 16:51 @743

¿ Un array ? No lo vi venir. Gracias por toda la ayuda, explorer.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Básico

¿Quién está conectado?

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