Actualizado el 21 de Marzo del 2018 (Publicado el 8 de Marzo del 2018)
646 visualizaciones desde el 8 de Marzo del 2018
188,9 KB
15 paginas
Creado hace 19a (10/03/2006)
Periódico de la Comunidad Perl
de Capital Federal
http://cafe.pm.org/boletines/
CaFe Perl v0.B
CaFe Perl v0.B - Periódico de la Comunidad
Perl de Capital Federal
Editorial
Hola Perl Mongers, bienvenidos a un nuevo número de CaFe Perl !!
Esta vez estamos ante un número bizarro como pocos. No me creen ??
• en el PoC de este mes Martín Ferrari encontró esoterismo, travestismo y magia negra en
los one-liners
• Una entrevista a un programador de Perl sobre Mac OS X que los va a dejar embrujados
• Nos perdemos entre los loops y las cintas de Möbius de Perl
Todavía incrédulos ?? empiecen a leer este número con una estaca de plata cerca y una
ristra de ajo en la ventana ... y después no digan que no tuvieron aviso.
Espero que lo disfruten.
Hasta la próxima taza de CaFe Perl !!! ... eso sí, café del bueno ;-).
Víctor A. Rodríguez (Bit-Man)
POC (peace of code)
Por Martín Ferrari
Todos los días se aprende algo nuevo, dice el dicho. Pero esto se torna casi literal con ciertas
cosas. En mi experiencia, VIM y Perl no dejan de sorprenderme. Como lo que nos interesa
acá es extraer jugo de joroba de camélido, hablaremos de lo segundo.
El otro día nuestro querido Víctor me acercó un post en PerlMonks (lo conocen?) sobre one-
liners, para darme ideas para la PoC de este mes, y leyendo comentarios me enteré de
algunas opciones de línea de comandos que harían encolerizar a todos los enemigos de Perl.
Esoterismo
Para empezar,
perl -pe1 archivo1 archivo2
"EH?" Me dirán. "Es otro reemplazo de cat!" Les diré.
Veamos en detalle. Estamos pasando las opciones -p y [-e 1]. La opción p tiene mucha
magia detrás: encierra nuestro programa en un bloque de este tipo (info sacada de perlrun(1):
LINE:
while (<>) {
... # Acá va el programa
} continue {
print or die "-p destination: $!\n";
}
Como resultado, cada línea de la entrada es impresa luego de pasar por nuestro programa,
que no hace nada. De manera análoga, y siguiendo la sintaxis de sed, la opción -n itera sin
imprimir por defecto. Poniendo esto alrededor de nuestro programa:
LINE:
while (<>) {
... # Acá va el programa
}
Hasta hoy, yo hacía cosas como:
perl -e 'while(<>) { s/sasa/lala/gi; print }'
Pero es mucho mejor así:
perl -pe 's/sasa/lala/gi'
Travestismo
Y el camello de 2 toneladas sigue haciéndose pasar por el ratoncito sed, con la opción -i
introducida recientemente en GNU sed, para hacer la edición in-place, es decir, no de
standard input a standard output, sino dentro de cada archivo nombrado. De manera opcional
nos permite decirle que haga un backup:
perl -i -pe 's/sasa/lala/gi' archivo
perl -i.bak -pe 's/sasa/lala/gi' archivo
Atención con no mezclar la opción -i con otras, ya que lo que esté a continuación se toma
como la extensión a agregarle al archivo original para guardar un backup. Para imprimir
rangos, igual que en sed:
perl -ne 'print if /^DESDE$/ .. /^HASTA$/'
Para parecerse al viejo y querido awk (sabe usted qué significa el nombre awk?), tenemos la
opción -a, autosplit, que nos deja en @F el contenido de cada línea cortado en los espacios
en blanco, o lo que pongamos como argumento de la opción -F:
perl -lane 'print "$F[0] $F[3]"'
perl -F: -lane 'print "$F[0] $F[4]"' /etc/passwd
Otra interesante: -l, en combinación con -n o -p recorta los enter (como chomp) a la
entrada y vuelve a ponerlos en la salida.
Magia negra
Aprovechándose de conocer exactamente el código que se agrega al usar la opción -n, hay
gente que hace cosas como esta:
perl -lne'$x+=$_}{print$x' # sum
perl -lne'$x+=$_}{print$x/$.' # avg
Claro que podríamos ser más elegantes y claros, y hacer lo que nos recomienda perlrun(1) y
usar los bloques BEGIN y END, poco conocidos pero no tan esotéricos:
perl -lne '$x += $_; END { print $x }'
Noten la ausencia de \n en el print.
Este me gusta por simpático e inesperado, la gracia es darse cuenta de las opciones que
estamos pasando. Además es útil, claro, como intérprete interactivo:
perl -demo
Más ejemplos
Uno que yo siempre hago en bash:
for i in *.JPG; do mv -i "$i" "${i/.JPG/.jpg}"; done
En perl puede hacerse así:
perl -le'foreach(<*.JPG>) {$o=$_;s/JPG$/jpg/; rename $o, $_
unless -e }'
Sí, yo también prefiero seguir haciéndolo en bash :)
W00t!
perl -i.bak -pe 's/Mozilla/Slopoke/g' /usr/bin/netscape
Palíndromos (palabras capicúa):
perl -lne 'print if $_ eq reverse' /usr/share/dict/spanish
Nota: hay código robado sin culpa del artículo de PerlMonks y de la lista de one-liners de Tom
Christiansen
PERlitas
Entrevista y traducción realizada por Víctor A. Rodríguez
Esta vez es la hora para la plataforma Apple y Mac OS X, así que es tiempo para PerlPad
(http://perl-pad.sourceforge.net/), que ofrece ejecución de código Perl como un servicio de
Mac OS X (system service). De esta forma se puede ejecutar código Perl desde casi
cualquier aplicación Mac OS X.
Pero dejemos a su creador, Thilo Planz, contarnos su historia
Por favor Thilo, una introducción para el grupo CaFe.pm
Soy un hacker Alemán en mis último, muy último veinte años. Después de graduarme de la
Universidad con un Master en Ciencias de la Computación y otro en Business IT, me mudé a
Tokyo a trabajar para una compañía que crea websites de comunidades. En ese entonces fui
introducido a Perl, y llegué a preferirlo sobre Java (que fue el lenguaje principal usado en la
Universidad)
Encontró algún otro lenguaje similar a Perl en la Universidad ?? Aprendió alguna
teoría que más tarde fuera empleada en Perl ??
La programación en la Universidad fue casi exclusivamente en Java, así que ahí no tuve
exposición a los lenguajes de scripting.
Aunque que eran específicos de Perl, los cursos de Ingeniería de Software y temas como las
introducción a estructuras de datos (lo que significa que realmente se qué es un hash y cómo
funciona antes de usarlo en Perl) han sido valiosos, por supuesto.
Cuál fue la motivación para construir "PerlPad" ??
El aprender y jugar con nuevas herramientas. Quería aprender cómo crear aplicaciones
Cocoa para Mac OS X1. Adicionalmente quería tener alguna especie de
calculadora/herramienta de texto/línea de comandos con capacidades Perl.
Obtuvo alguna ayuda de otros proyectos Open Source ?? (código, consejos, etc.)
PerlPad no habría sido posible (y yo no habría tenido la idea para hacerlo) sin CamelBones2.
Este es un bridge entre Perl y Objective-C3 y permite realizar aplicaciones Cocoa
completamente en Perl. Provee una increíble cantidad de magia “detrás de escena”
Qué ambiente de desarrollo utiliza ??
Para PerlPad uso Xcode de Apple (ver más abajo).
Para otras tareas de edición Perl, simplemente un editor de texto común, cualquier cosa que
pueda editar múltiples archivos y resaltar la sintaxis. Me gusta jEdit.
Cunado hago aplicaciones web, la plataforma Mozilla tiene herramientas grandiosas (DOM
1 Cocoa es un framework orientado a objetos para realizar aplicaciones Mac OS X
2
3
http://camelbones.sourceforge.net/
Lenguaje C orientado a objetos (http://en.wikipedia.org/wiki/Objective_C) mayormente usado en Mac OS X y
GNUstep
inspector, debugger de JavaScript, muchos plugins).
Prefiere un IDE Xcode, o cree que el “estado del arte” de IDEs Perl es
suficiente ??
Uso Xcode para PerlPad sólo porque es el ambiente mejor soportado para el desarrollo en
Cocoa. Camelbones viene con plantillas para este, las integra con Interface Builder, puede
crear y ejecutar makefiles que juntan todo en una aplicación Mac.
Para los proyectos que no son Cocoa, alcanza con un simple editor de texto, especialmente
si no hay necesidad de hacer un script (y con Perl usualmente no la hay)
Qué habilidades (relacionadas con Perl o no) obtuvo mientras construía
"PerlPad" ??
Del lado de Perl, tuve que empaparme con tablas de símbolos, y cómo funciona el sistema
Unicode.
Del lado de Mac, aprendí cómo trabajar con las herramientas de desarrollo de Apple, el API
Cocoa y algo de ObjectiveC.
Qué consejo le daría a los futuros diseñadores y hobistas que afrontan un nuevo
pryecto ??
Creo que "release often, release early" es un consejo que suena bastante para los
programadores hobistas. Siempre temí que esto llevaría a código no maduro y proyectos
abandonados, y que alguien eventualmente podría esto en mi contra. Pero esto no ocurre.
Todos saben que los proyectos de hobistas son proyectos de hobistas. Algunos se llegan a
completar o ni siquiera a levantarse del piso en primer lugar. Pero si no lo mostrás al mundo,
perdés la oportunidad de generar el interés que podría hacer de tu proyecto uno realmente
exitoso.
En resumen, seguí adelante, sacá tus cosas a la calle. No hay nada más gratificante que la
respuesta de los usuarios.
En qué parte del código le aconsejaría mirar al programador que se inicia en
Perl, para tener una experiencia de aprendizaje placentera ?
No estoy seguro que el código de PerlPad sea muy bueno desde el punto de vista de
ingeniería de software o educacional, realmente. Comenzó desde una plantilla de una
aplicación “Hello World” y orgánicamente (opuestamente a “de acuerdo al plan”) creció desde
ahí.
Cómo se puede colaborar con "PerlPad" ??
Es un proyecto muy pequeño, tanto en tamaño de código como en gente (sólo yo,
básicamente), así que la colaboración puede ser completamente sin ceremonias.
Simplemente envíenme ideas, reportes de bugs, pedazos de código, preguntas a mi o a la
lista de correo1.
Qué funcionalidades cree que no están, y cuáles se agregarán pronto ??
1
http://sourceforge.net/mail/?group_id=72650
“Pronto” es un concepto difícil aquí. El desarrollo ocurre en ráfagas.
0.2.2 con compatibilidad Intel está finalizado, solamente espera por los testers.
He estado con una versión 0.3 casi finalizada por dos años. Sólo necesita arreglos en la
docum
Comentarios de: CaFe Perl Issue0b (0)
No hay comentarios