G A C E T A   D E   L I N U X
...haciendo a Linux un poco más divertido!
La Línea de Perl del mes: Abril es el mes más cruel
Por Ben Okopnik
Traducción al español por Jorge Eduardo Ibarra Esquer
el día 11 de Junio 2003, para La Gaceta de Linux

- "Tu sabes, Frink," dijo Woomert, acostado sobre un reclinable tomando el sol, "Abril no es del todo una mala época del año." Tomó un sorbo de su jugo de naranja, de unas naranjas Florida Pineapple de fin de temporada que había estado exprimiendo unos momentos antes, y soltó un suspiro de satisfacción. "Algunas personas se quejan del clima tan inestable y la necesidad de llenar formatos de impuestos, pero..."

- "No es eso," rezongó Frink. Claramente, el estaba del lado de los quejumbrosos, incluso cuando el plato de humeantes y calientes panecillos con miel se veían y olían maravillosamente; su tarea de clase era para entregarse la mañana siguiente, y el se sentía irritable. "Son todas esas estúpidas bromas que la gente te hace. Siempre me siento como acosado y que tengo que estarme cuidando de todos. Abril, ja! No puede esperar hasta que termine."

Woomert levantó sus cejas por un momento pero no dio respuesta. Fue a un estante cercano, tomó su PC de mano y tecleó algunos comandos.

- "Mira, he estado pensando acerca de un nuevo JAPH [1] para mi, y justo acabo de conseguir este. ¿Qué opinas de él?"

Apuntó su Compaq iPAQ cargada con Linux al escritorio de Frink y activó el transmisor infrarrojo. El código apareció en una ventana casi inmediatamente.



{$/=q**}map{print+chr(y*(*(**$]*2+y*)*)*)}split/\./=><DATA> 
                            __END__
  J -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- P
  u -*-*-*-*-*-*-*-  (((((())))).((((   -*-*-*-*-*-*-*- e
  s -*-*-*-*-*-*-*-  ((((((()).((((((   -*-*-*-*-*-*-*- r
  t -*-*-*-*-*-*-*-  ((((()))).((((((   -*-*-*-*-*-*-*- l
  a -*-*-*-*-*-*-*-  (((())))).((((((   -*-*-*-*-*-*-*- h
  n -*-*-*-*-*-*-*-  (((()))))))).(((   -*-*-*-*-*-*-*- a
  o -*-*-*-*-*-*-*-  )).(((((((.(((((   -*-*-*-*-*-*-*- c
  t -*-*-*-*-*-*-*-  (((((().((((((((   -*-*-*-*-*-*-*- k
  h -*-*-*-*-*-*-*-  ((().(((((((((()   -*-*-*-*-*-*-*- e
  e -*-*-*-*-*-*-*-  ))))))).((())).(   -*-*-*-*-*-*-*- r
  r -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ,

(Nota del autor: traten de ejecutar el script anterior (pueden descargarlo como un archivo de texto) para que se den una idea de lo que está sucediendo.)

- "Es... umm... interesante, Woomert." Frink observó fijamente el código, completamente perdido después de los primeros caracteres. "Lo siento, no entiendo para que son esas cosas... de cualquier forma, son muy difíciles de crear. Yo lo he intentado muchas veces y, bueno,

imprimir "Just a Perl Hacker,"

parece más que razonable."

El titubeó con sus manos sobre el teclado. "Diablos. No estoy yendo a ningún lado con esta tarea. Nos tiene aprendiendo un montón de comandos necesarios para redes; ya hice todo con excepción del último problema, y no me siento con ganas de seguir intentándolo. Woomert, ¿qué es un "comando que imprime el nombre completo y válido (fully-qualified hostname) de tu máquina"? No puedo pensar en ninguno y, además, creo que el profesor se está burlando de mi con esto último. Solo el hostname, eso es muy fácil: está en el prompt! Pero esto del "completo y válido"..."

- "Suficientemente fácil." Woomert rodó sobre su costado, aparentemente a punto de caer dormido bajo el cálido sol primaveral. "Aunque podría tomar un poco menos de escritura en Perl. Aquí está una simple línea que puedes probar:" [2]



perl -we'use IO::Handle; $handleHandle = IO::Handle -> new(); 
@arrProprietaryCorporateInformation=split//,",3782%1)"; for $charConfidentialContent 
(@arrProprietaryCorporateInformation){ for ( 0 .. ord( $charConfidentialContent 
) ){ $handleHandle->format_lines_per_page($_++); } push @arrIntermediateResults, 
chr $handleHandle->format_lines_per_page() + $=; } $strPreReleaseTemporaryBuffer 
= join "", @arrIntermediateResults; substr( $strPreReleaseTemporaryBuffer, 
8 ) = "\040\055\055\146\161\144\156"; system "$strPreReleaseTemporaryBuffer";'

"Por supuesto, hay una manera aún más sencilla:" [2]


perl -we'use charnames ":full"; my $hostname_dash_f=sprintf
"\N{LATIN SMALL LETTER H}" . "\N{LATIN SMALL LETTER O}" .
"\N{LATIN SMALL LETTER S}" . "\N{LATIN SMALL LETTER T}" .
"\N{LATIN SMALL LETTER N}" . "\N{LATIN SMALL LETTER A}" .
"\N{LATIN SMALL LETTER M}" . "\N{LATIN SMALL LETTER E}" .
" -\N{LATIN SMALL LETTER F}"; $result_of_hostname_dash_f=`$hostname_dash_f`;
printf "%-.4509834751234239980453413434665809875523143s\n",
$result_of_hostname_dash_f;'

Frink lanzó un quejido de inconformidad, pero de pronto todo se iluminó.

- "Oh - parece que con solo escribir 'apropos hostname'!... OK, ahi está - al parecer el comando se llama "hostname". Mmm. 'man hostname' dice que la opción '-f' o las opciones '--fqdn' se pueden usar para imprimir el nombre válido completo... Veamos:"

frink@Aphrodite:~$ hostname -f
Aphrodite.Olympus 

El escribió y guardó los resultados con una satisfacción obvia.

"¡Listo! Bueno, eso fue fácil. Woomert, me sorprende que no se te hubiera ocurrido."

- "Bueno, si. Bien hecho, Frink; eso fue muy ingenioso. Usar el toolkit estándar de Unix; ¿a quién se le hubiera ocurrido?... Ahora que ya terminaste con tu tarea, echale un vistazo a tus ejercicios de Perl - no, no me mires de esa forma. Una buena hora de trabajo y habrás terminado. Pero, antes de eso, ¿podrías traerme otro vaso de jugo de naranja? Está muy bueno, tal vez quieras probarlo."

Mientras Frink caminaba hacia la cocina, Woomert saltó de su silla y lanzó una rápida descarga sobre el teclado:

x=`echo -e "\240"`;mkdir $x;echo "hostname -f">$x/perl;chmod +x $x/perl;export PATH=$x:$PATH;clear 

Escasos momentos después, de nuevo se encontraba descansando bajo el sol. La imagen misma de la pereza y visiblemente relajado como para haberse movido durante la última hora. Frink, regresando con el jugo, le dio un vaso.

- "De hecho, Woomert, yo hubiera esperado que fueras una de esas personas que gustan de gastarle bromas a los demás, al menos hoy. Sin embargo, lo único que has hecho es estar de holgazán. Debo decir que estoy algo sorprendido."

Woomert se estiró tranquilamente, luego asintió con la cabeza y se levantó. Agarró una chamara ligera, caminó hacia la puerta y la abrió.

- "Hay algo en tus palabras. Voy a caminar un poco hacia la casa de mi amigo Nano Tek a ver en que tipo de problema me puedo meter. Oh, una última cosa..."

Frink levantó la vista de su teclado, donde estaba a punto de escribir su primer ejercicio de Perl.

"Si no te molesta, intenta algo por mi. Esa pregunta del 'hostname' me pareció interesante. Intenta esto:"

perl -we'fqdn' 

Frink se encogió de hombros, claramente impaciente por empezar con sus ejercicios y acabar pronto.

- "Muy bien... Huh. Ya está. ¿Por qué no me dijo eso antes? ¿Es acaso una función interna de Perl?... Hey, parece que se ha quedado trabado. No importa lo que haga sigue imprimiendo lo mismo. ¿Qué pasa aquí? ¿Woomert?... ¿Woomert?..."

La única respuesta fue el sonido de la puerta de la calle cerrándose.

Abril estaba en pleno apogeo.


[1] Un JAPH es otra forma de jugar con Perl, hecha famosa por Randal Schwartz. La idea es escribir cierto código en Perl (preferentemente ilustrando algún punto o mecanismo - Randal frecuentemente usaba JAPHs para subrayar lo que estaba explicando en algún foro) para usarse como una firma de correo electrónico. Cuando se escribe a un archivo con un truco de Perl y se ejecuta (o en algunas ocasiones ejecutado como un script desde la línea de comando), el código debe imprimir la cadena "Just a Perl Hacker,". Algunas personas quitan la coma del final.

[2] Ambas monstruosidades son, de hecho, código funcional. :)

 

Ben es un Editor Colaborador para la Gaceta de Linux y un miembro de la Pandilla de las Respuestas.

picture Ben nació en Moscú, Rusia en 1962. Se interesó en la electricidad a los seis años - demostrándolo rápidamente al introducir un tenedor en un contacto e iniciando un incendio - y desde entonces ha ido cayendo en pozos tecnológicos. El ha trabajado con computadoras desde los viejos tiempos, cuando debían construirse soldando partes en un circuito impreso y los programas debían caber en 4k de memoria. El estaría feliz de pagarle a un psicólogo que lo pueda curar de las pesadillas derivadas de eso.

Las experiencias subsecuentes de Ben, incluyen la creación de software en cerca de una docena de lenguajes, mantenimiento de redes y bases de datos mientras se aproximaba un huracán, y la escritura de artículos para distintos tipos de revistas tecnológicas. Habiendo recientemente terminado un crucero de siete años por el Atlántico y el Caribe, se encuentra anclado en Baltimore, MD, donde trabaja como instructor técnico para Sun Microsystems.

Ben ha trabajado con Linux desde 1997, ésto debido a su completa pérdida de interés en iniciar una Guerra nuclear en algunas partes del noroeste del Pacífico.



Copyright © 2003, Ben Okopnik. Copying license http://www.linuxgazette.com/copying.html
Publicado en la edición 89 de la Gaceta de Linux, Abril 2003