Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Ayuda para mejorar código

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Lun Mar 31, 2008 6:35 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
Ayuda para mejorar código Responder citando

¿Hay alguna forma de hacer esto más rápido y "limpio"?

Perl:
sub Crypt {
    my ( $kk, $text ) = @_;
    my $i = 0;
    my @return;
    for ( $i; $i <= length($text); $i++ ) {
        my $a = unpack( 'C', substr $text, $i, 1 );
        my $b = unpack( 'C', substr $kk,   $i, 1 );
        push @return, ( pack( 'C', $a ^ $b ) );
    }
    return @return;
}


Es un encriptador OTP (One-time pad) donde $kk y $text tienen el mismo tamaño.

¿Sería mejor hacer un módulo y usar tie de alguna manera ( como Tie::File ) para controlar el buffer de las dos escalares sin limitar el tamaño?
¿Hay alguna forma de mejorar la parte del for?

Sugerencias o aplausos son bienvenidos Smile
Mensaje Mar Abr 01, 2008 1:36 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

Si solo se trata de hacer una operación or-exclusivo entre dos cadenas de caracteres, no hace falta liarse tanto...

Hay que tener cuidado a la hora de usar las operaciones de bits, ya que no es lo mismo hacer las operaciones con strings que con números:

Perl:
perl -le '$a=150;$b=105;print $a|$b'     # 255, porque hace 0x96 | 0x69 = 0xFF

perl -le '$a="150";$b="105";print $a|$b' # 155, porque la operación se hace carácter a carácter


Leer la sección Bitwise-String-Operators.

En tu caso, si quieres hacer la operación or-exclusivo a nivel de carácter, te vale con escribir:

Perl:
sub Crypt {
    my ( $kk, $text ) = @_;
    return split //, $kk ^ $text;
}


Ejemplo
Perl:
perl -le 'sub Cryp { my($k,$t) = @_; return split //, $k ^ $t } print Cryp("creating021"," "x5)' # CREATing021
Mensaje Mar Abr 01, 2008 5:41 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 481
Ubicación: Frente al monitor
Responder citando

Perfecto, y gracias por el link Very Happy
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group