Tutorial de PERL en castellano : Decodificando |
Preguntas frecuentemente preguntadas Bibliografía. Recursos Internet Presentando lo impresentable Todo bajo control |
pack
y unpack
En realidad, la contratación de este nuevo genio de la informática,
al que ya le está buscando también colocación en la
empresa que controla los ordenadores de la campaña electoral, le
ha dejado algún tiempo libre a nuestro [censurado] político.
Para emplear este tiempo libre, decide conectarse con eso que le ha dicho
su amigo Borrell, que se llama internez o algo así; dentro de la
internez, y de una parte especialmente yanqui llamada usanez o algo así,
hay unos grupos de discusión de temas de máxima actualidad.
En concreto, un grupo denominado alt.binaries.pictures.erotica.politics
publica interesantes fotos de políticas de la oposición en
actitud de debate (al menos eso es lo que le han contado).
Pero su gozo se encuentra en un pozo cuando sólo ve letras y
más letras en los mensajes que le van llegando. Su informático
residente le explica que vienen codificadas con un programa denominado
uuencode
, y que tiene que salvarlas cada una
por separado y decodificarlas después, antes de verlas. Con la pericia
que dan las ganas, escribe el siguiente programa, uudec.pl
.
|
Este programa utiliza la orden unpack
para
decodificar cadenas, y las escribe en salida estándar. La descripción
es incluso más corta que el programa. Los mensajes en ciertos foros
de USENET vienen divididos en varias partes, cada una de las cuales contiene
un pedazo de un fichero codificado con uuencode
(puede ser un .GIF, un .WAV o cualquier otro). Para usar el programa, se
salvan todas las partes del mensaje correlativamente en un fichero. El
programa busca primero el nombre del fichero codificado, que aparece en
una línea de la formabegin 644 nomfich.gif
,
abre un fichero con ese nombre, y va escribiendo en él las cadenas
decodificadas.
Para llamar a este fichero, se escribe
UNIX% uudec.pl fichero.uu
y se crea el fichero codificado, que luego podrá uno contemplar con su visor de GIFs preferido (o escuchar con la SoundBlaster). Se pueden dar comodines en la línea de comandos; el bucle lo irá abriendo uno por uno.
En realidad, la orden unpack
decodifica
de formatos de codificación internos a cadenas; la orden pack
hace exactamente lo contrario. La utilidad de todo esto se me escapa un
poco, salvo que, por ejemplo, se quieran almacenar números reales
de forma que pueda leerlos directamente un programa en C. En ese caso,
se escribiría
print pack( "f", $zipi);
Un número
real escrito así se podría leer directamente con la orden
read
del C (pero, ojo, no con la scanf
,
que sirve solamente para ficheros de texto). Otra forma de usarlo es
para formatear ficheros de salida; usando
print pack("A7",$cadena)
, haremos que la salida ocupe justamente 7 caracteres,ni más mi menos; así aparecerá todo en bonitas columnas. Por ejemplo, nuestro archiconocido memoria.pl se podría convertir en este memoria-col.pl
|
Este programa, sobre el fichero siguiente
uno, 1605168 este es el dos, 166166 este puede ser el tres, 1616136
produciría la siguiente salida
uno 401292 19:54 25/7 este es el dos 41541.519:54 25/7 este puede ser e404034 19:54 25/7
(dependiendo, claro está, de cuando se hayan producido las susodichas transacciones cambiarán horas y fechas).
[ Preguntas frecuentemente preguntadas] [ Bibliografía.] [ Recursos Internet] [ Presentando lo impresentable] [ Todo bajo control] |