• Publicidad

Ayuda para mejorar código

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Ayuda para mejorar código

Notapor creating021 » 2008-03-31 19:35 @858

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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
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;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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 :)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor explorer » 2008-04-01 02:36 @150

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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
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
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub Crypt {
    my ( $kk, $text ) = @_;
    return split //, $kk ^ $text;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ejemplo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
perl -le 'sub Cryp { my($k,$t) = @_; return split //, $k ^ $t } print Cryp("creating021"," "x5)' # CREATing021
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Notapor creating021 » 2008-04-01 18:41 @820

Perfecto, y gracias por el link :D
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado