• Publicidad

Ayuda con print con colores

¿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 print con colores

Notapor BigBear » 2013-12-13 19:14 @843

Hola. Estoy mejorando una función que hice para usar print con colores usando un módulo llamado Color::Output. Ahora le agregué otra función llamada texto_raro() que es como un efecto de texto corrido. El tema es que combinando los dos da errores con caracteres raros al contrario que cuando los uso por separado.

El código es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Color::Output;
  2. Color::Output::Init;
  3. use Time::HiRes "usleep";
  4.  
  5. sub texto_raro {
  6. my @letras = split //, $_[0];
  7. for(@letras) {
  8. usleep(40_000);
  9. print $_;      
  10. }
  11. }
  12.  
  13. printear("dsaads [+] hola mundo sdasdds\nsadsadsadsa [+]\nsadsadsadsa [+]","text");
  14.  
  15. sub printear {    #
  16.     my $test;
  17.     my $efecto;
  18.     my $word = "colors=y\nefect=y\n";
  19.  
  20.     if ( $word =~ /colors=(.*)/ ) {
  21.         $test = $1;
  22.     }
  23.    
  24.     if ( $word =~ /efect=(.*)/ ) {
  25.     $efecto = $1;
  26.     }
  27.    
  28.     if ( $test eq "y" ) {
  29.         if ( $_[1] eq "text" ) {
  30.                        
  31.                         if($efecto=~/y/) {
  32.                         texto_raro("\x03" . $_[2] . $_[0] . "\x030");
  33.                     } else {
  34.             cprint( "\x03" . $_[2] . $_[0] . "\x030" );
  35.                     }
  36.         }
  37.         elsif ( $_[1] eq "logos" ) {
  38.           cprint( "\x03".$_[0]."\x030" );
  39.         }
  40.         elsif ( $_[1] eq "stdin" ) {
  41.             if ( $_[3] ne "" ) {
  42.                 cprint( "\x03" . $_[2] . $_[0] . "\x030" . "\x03" . $_[3] );
  43.                 my $op = <stdin>;
  44.                 chomp $op;
  45.                 cprint("\x030");
  46.                 return $op;
  47.             }
  48.         }
  49.         else {
  50.             print "error\n";
  51.         }
  52.     }
  53.     else {
  54.                    #
  55.         if ( $_[1] eq "text" ) {
  56.                        
  57.                         if($efecto=~/y/) {
  58.                         texto_raro($_[0]);
  59.                     } else {
  60.             print( $_[0] );
  61.                     }
  62.         }
  63.        
  64.          elsif ( $_[1] eq "logos" ) {
  65.             print( $_[0] );
  66.         }
  67.        
  68.         elsif ( $_[1] eq "stdin" ) {
  69.             if ( $_[3] ne "" ) {
  70.                                 if($efecto=~/y/) {
  71.                                 texto_raro($_[0]);
  72.                             } else {
  73.                 cprint( $_[0] );
  74.                 }
  75.                 my $op = <stdin>;
  76.                 chomp $op;
  77.                 return $op;
  78.             }
  79.         } else {
  80.                 print "error\n";       
  81.                 }
  82.     }
  83. }    #Fin de printear
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Y me devuelve el resultado con caritas raras al estilo ascii. Recién acabo de intentar darles un ejemplo pero cuando hago copiar y pegar de la consola al navegador se muestra bien en el navegador (algo muy raro)

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

Publicidad

Re: Ayuda con print con colores

Notapor explorer » 2013-12-13 20:01 @875

Dentro de la función printear() haces referencia a $_[2] y $_[3], pero a la función solo le pasas dos argumentos.

Lo de que salgan caracteres extraños depende de muchas cosas. Lo principal es tener claro que los bytes que enviamos a la terminal, ésta los sepa interpretar, caracteres de escape y su codificación incluidos.

Si guardas el resultado a un archivo de texto, y luego lo vuelcas en hexadecimal, puedes ver el contenido real de lo que envías.
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 print con colores

Notapor BigBear » 2013-12-13 20:16 @886

Intenté usando "\Q$code\E" como me enseñaste para evitar caracteres raros y no funcionó.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Ayuda con print con colores

Notapor explorer » 2013-12-13 20:35 @899

"\Q...\E" no "evita" caracteres, solo los "escapa".
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 18 invitados