PDF de programación - CaFe Perl Issue0b

Imágen de pdf CaFe Perl Issue0b

CaFe Perl Issue0bgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 8 de Marzo del 2018)
532 visualizaciones desde el 8 de Marzo del 2018
188,9 KB
15 paginas
Creado hace 18a (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
  • Links de descarga
http://lwp-l.com/pdf9332

Comentarios de: CaFe Perl Issue0b (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad