Perl para el día a día

Ernesto Hernández-Novich emhn at telcel.net.ve
Fri Nov 24 06:41:47 CST 2000


Suficiente Perl para hacer casi todo. Esta es un parte de una lista canónica
que Tom Christiansen (el segundo a bordo en la comunidad Perl) publicó en una
ocasión en que le preguntaron ejemplos típicos de uso de Perl diario. Extraje
algunas de las más interesantes en aquella ocasión, particularmente aquellas
que apoyan el trabajo de administración de sistemas y de programación Perl.

# Ejecutar my_file
perl my_file

# Ejecutar el debugger "standalone" (Se puede cambiar el 42 pero, ¿quién
# puede pensar en un número mejor?)
perl -d -e 42

# Ejecutar my_file, pero con advertencias adicionales. Personalmente, todos mis
# programas los ejecuto con -w para estar seguro que no hice ninguna cosa rara.
perl -w my_file

# Ejecutar my_file a través del debugger
perl -d my_file

# Verificar sintaxis, con advertencias adicionales, _sin_ ejecutar el programa.
perl -wc my_file

# Muy útil al final de "find foo -print |" y mucho más rápido que
# "find foo -print | xargs rm"
perl -nle unlink

# El típico programa de una línea
perl -e 'print "hello world!\n"'

# Suma la primera y penúltima columnas en un archivo cuyas columnas están
# separadas por espacios en blanco
perl -lane 'print $F[0] + $F[-2]'

# Imprime las líneas 15 a 17 de los archivos indicados
perl -ne 'print if 15 .. 17' *.pod

# Edita los archivos indicados, sustituyendo "foo" por "bar". Deja una copia
# del archivo original con extensión .bak (si no quieren la copia, pongan -i
# solamente).
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c

# Imprime las primeras cincuenta líneas de cada archivo
perl -pe 'exit if $. > 50' f1 f2 f3 ...

# Borra las primeras diez líneas del archivo, dejando una copia del original
# en foo.txt.old (si no quieren la copia, pongan -i solamente).
perl -i.old -ne 'print unless 1 .. 10' foo.txt

# Imprime los archivos indicados invirtiendo el orden de líneas, i.e. la
# primera línea se convierte en la última, pero las líneas mantienen su
# legibilidad.
perl -e 'print reverse <>' file1 file2 file3 ....

# Encuentra palíndromos (palabras capicúa)
perl -lne 'print if $_ eq reverse' /usr/dict/words

# Imprime los archivos indicados invirtiendo byte a byte, i.e. el primer
# caracter se convierte en el último.

perl -0777e 'print scalar reverse <>' f1 f2 f3 ...

# Imprime los archivos indicados invirtiendo por párrafos, i.e. el primer
# párrafo se convierte en el último. Un "párrafo" es un bloque de líneas que
# tiene una línea en blanco al final.
perl -00 -e 'print reverse <>' file1 file2 file3 ....

# Incrementa cualquier número encontrado en los archivos.
perl -i -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 ....

# Imprime los archivos invirtiendo cada línea.
perl -nle 'print scalar reverse $_' file1 file2 file3 ....

# Elimina todas las líneas del archivo, excepto aquellas encerradas entre
# "START" y "END"
perl -i.old -ne 'print unless /^START$/ .. /^END$/' foo.txt

# Editor binario (mucho cuidado!)
perl -i.bak -pe 's/Mozilla/Slopoke/g' /usr/local/bin/netscape

# Busca palabras duplicadas
perl -0777 -ne 'print "$.: duplicada $_\n" while /\b(\w+)\b\s+\b\1\b/gi'

Si acompañan estos ejercicios con la lectura de man perlrun, man perlfunc, man
perlop y man perlregexp, tendrán una buena visión de lo que hace el lenguaje.
-- 
Ernesto Hernández-Novich - Running Linux 2.2.17 i686 - Unix: Live free or die!
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V
PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++
-----END GEEK CODE BLOCK-----

------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list