Una solución sencilla:
Using perl Syntax Highlighting
#!/usr/bin/perl
$x = "123456";
$y = "";
for ( $i = 0; $i < length($x); $i++ ) {
$y = $y . ord( substr( $x, $i, 1
) );
}
print "$x=$y\n";Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Lo que hacemos es recorrer, uno a uno, todos los caracteres de $x, el primer string, y agregando la salida de
ord() en la variable $y, que hace de acumulador.
Con expresiones regulares queda un poco más corto, pero el trabajo es casi el mismo:
Using perl Syntax Highlighting
$x = "123456";
$x_viejo = $x;
$x =~ s/(.)/ord($1)/ge;
print "$x_viejo=$x";Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Necesitamos guardar el valor anterior de $x, ya que va a ser modificado. En la expresión regular buscamos un sólo carácter cada vez (
.) y nos quedamos con él (
()). Para ese carácter, lo sustituimos por el valor
ord(). Como es la ejecución de un operador, ponemos el modificador
/e y como queremos repetir esto para todos los caracteres disponibles, ponemos el
/g.
Esta otra forma usa el desempaquetado:
Using perl Syntax Highlighting
$x = "123456";
$y = join("", unpack("c*",$x));
print "$x=$y\n";Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
A unpack le decimos que le vamos a pasar una ristra de bytes y queremos que nos la convierta en los valores decimales que representan. El join unirá todos esos valores en un único escalar.