¿Qué es Perl?
Perl
(Practical Extraction y Report Language)
es un lenguaje para la manipulación de cadenas de datos y de archivos, y
su diseño ignora la distribución en pantalla de botones, menús, listas de
selección, y otros elementos propios de una interfaz, es decir, no es nada
vistoso, aunque su especialización en el uso de modelos de búsqueda lo hace muy
potente. Se considera una herramienta extraordinaria alternativa muy atractiva,
porque es un lenguaje especializado en buscar, extraer y presentar información,
no ya únicamente como lenguaje de programación para realizar scripts CGI, sino
como una ayuda para realizar tareas de administración de sistemas o de
automatización de ciertas labores.
Perl funciona sobre un amplio abanico de plataformas, principalmente el sistema operativo Windows, en cualquiera de sus versiones. Este es un ejemplo: www.ActiveState.com/ActivePerl
Es un intérprete que fue creado por Larry
Wall y liberado al mundo para disfrute de cualquier persona. Larry
cedió Perl de forma gratuita, estipulando como tal su uso, el acceso libre a
los intérpretes, y a las mejoras de Perl. Y condicionó su utilización a que no
se hiciera explotación comercial o de lucro.
Su función
originalmente fue para extraer informes de ficheros de texto y utilizar dicha
información para preparar informes. Actualmente ha evolucionado de forma que es
posible realizar labores de administración en cualquier sistema operativo. Debe
gran parte de su popularidad a tratarse de un intérprete que se distribuye de
forma gratuita. Un script genérico de Perl puede ejecutarse en cualquier
plataforma en la que tengamos un intérprete disponible.
Con el crecimiento del WWW se vio que era necesario realizar programas CGI y Perl se convirtió en la elección natural para los que ya estaban familiarizados con este lenguaje. El aumento de sitios Web ha transformado el papel de Perl de un lenguaje de Script oscuro y desconocido a la herramienta principal de programación CGI.
Dependiendo del sistema operativo que se utilice,
habrá que utilizar una distribución de Perl u otra. La principal referencia
figura en http://www.perl.com/.
No obstante, en http://www.cpan.org/
podemos encontrar más distribuciones, disponiendo de al menos una para cada
plataforma.
Este documento se centra en la utilización de Perl
desde los sistemas operativos de la serie Microsoft Windows igual o superior a
la 95. Una excelente fuente de recursos para Perl sobre Windows la podemos
encontrar en http://www.activestate.com/
Es
conveniente utilizar como directorio base de la instalación C:\Perl, y añadir
al PATH la ruta C:\PERL\BIN. El típico programa “Hola, mundo” en Perl se
realiza poniendo en un fichero (supongamos “hola.pl”) las siguientes
instrucciones:
#!c:/perl/perl
print “Hola mundo\n”;
Para ejecutar basta con escribir, desde una
ventana de MS-DOS:
perl hola.pl
Recomendaciones en el proceso de
instalación
·
·
Perl es un lenguaje case-sensitive.
·
·
Para editar el código fuente
necesitamos simplemente un editor de texto. El Notepad puede valer.
·
·
Se ejecuta desde la línea de
comandos de una ventana del sistema operativo.
·
·
Los
comentarios comienzan con el carácter #
·
·
Las
instrucciones terminan en punto y coma.
·
·
La función print sirve para
mostrar información por pantalla, y admite formatos muy diversos aunque
sencillos de comprender. En Perl hay mucha flexibilidad para escribir los
argumentos:
print(“Un texto”, “Otro texto”); # con paréntesis
print “Un texto”, “Otro texto”; # sin paréntesis
·
·
Perl ofrece una ayuda en línea desde la consola de comandos. Por
ejemplo, para obtener ayuda sobre la función print, escribiremos en una ventana
MSDOS:
perldoc –f print
Variables escalares
Cualquier nombre que comience con $ es una variable escalar, lo que significa que puede contener sólo un objeto, aunque este objeto puede ser también complejo. El signo = se usa para asignar el objeto a la variable. Los caracteres permitidos para un nombre son las letras, dígitos y el caracter de subrayado. Después de $ debe continuar al menos una letra. Las letras mayúsculas y minúsculas son diferenciadas en los nombres de variables.
Ejemplo:
$lenguaje = "Perl";
$LENGUAJE, $lenguaje y $LeNgUaJe son 3 variables distintas.
$_ es una variable
muy especial porque almacena siempre la última línea que se dio de entrada
También pueden almacenar modelos.
Ejemplo: $Variable = /^Canción triste de Hill Street/
Variables especiales.
$_ Almacena la línea completa que ha sido
leído.
$` Almacena la parte situada a la izquierda de un modelo.
$' Almacena la parte situada a la derecha de un modelo.
$& Almacena la parte propia del modelo encontrado.
Ejemplo (varespe.pl):
# Variables especiales
$_ = "Me gustan los
mazapanes y el anís";
/ mazapanes /;
print $`, "\n"; # "Me gustan los"
print $', "\n"; # "y el anís"
print $&, "\n"; # "mazapanes"
print $`.$&.$'; # Igual que $_
Variable de edición directa $^I.
Cuando a $^I se le asigna un valor como .bak o .000 el lenguaje activa la edición directa de los archivos que llegan al programa a través del operador <>. Es muy útil para buscar y sustituir cadenas dentro de un grupo de archivos. Estudia el siguiente ejemplo (edicdir.pl):
# Edición directa con Perl
# Busca y reemplaza todas las cadenas html por HTML
# Teclear: Perl edicdir.pl <unhtml.htm doshtml.htm
$^I = ".bak";
while (<>) {
s/html/HTML/g;
print;}
Matrices @.
Se definen con el símbolo @ como primer carácter para diferenciarlas de las variables escalares. Contienen listas de objetos que no tienen que ser del mismo tipo.
Ejemplos:
@frutas =
("manzana", "pera", "plátano")
@diameses = (31,28,31,30,31,30,31,31,30,31,30,31)
@detounpoco = ("manzana", 31, @frutas, $eltiempo)
Matrices asociativas.
Una matriz asociativa está indexada por cadenas en lugar de por números. Se utiliza % para definir el tipo de matriz asociativa y un elemento está indexado por el anterior formando ambos parejas del tipo indice=valor.
Un ejemplo sencillo con una matriz asociativa (matrasoc.pl):
%campos = ("nombre", "Ana", "calle", "Andalucia 1", "edad", "56");
Foreach(), Keys() y Each().
Ejemplo usando foreach para recorrer los elementos de una matriz hasta el final, la función keys() para acceder a los índices de una matriz asociativa y también la función each() que se presenta como la forma más lógica de acceder a los índices y a los valores de una matriz asociativa (matrasc2.pl):
# Recorre e imprime una matriz @ con foreach.
@meses = ("I", "ene", "II",
"feb", "III", "mar");
foreach (@meses) {
Split().
Usar Split() para convertir cadenas en listas de datos.
# Un ejemplo de Split() para convertir cadenas en listas
$cadena= "empresa=Donuts&producto=Donettes&precio=100";
Como se procesa un programa Perl
Perl procesa el programa en varias fases:
1. examina la linea #!/usr/bin/perl... buscando suiches...
este paso lo hace el shell de Unix pero en W95/NT lo hace el Perl
2. ejecución previa... un recuerdo de awk...
subrutinas BEGIN...
funciones "use" para cargar módulos
recuerde que los módulos empiezan por mayuscula...
esta ejecución tenprana de "use" es otra diferencia con "requiere"
... requiere se ejecuta en la fase 4
funciones "use" para dar directivas al compilador
en este caso la palabra que sigue a use empieza por minuscula
use integer;
# indica al compilador que solo queremos enteros
no integer;
# indica al compilador que queremos números decimales
3. compilación... se habia dicho que Perl no necesita compilar...
esta es una compilación a un codigo intermedio no a codigo de maquina
...cancela si hay errores de sintaxis...
4. ejecución carnuda...
ejecuta el codigo intermedio... hasta encontrar exit
... o hasta que se acabe el archivo... o hasta que encuentre
una linea con __END__
5. ejecución final...otro recuerdo de awk...
subrutinas END... empezando por el último que se cargo
en las subrutinas BEGIN y END se puede omitir sub
BEGIN {
print "esto se escribe en la fase 2\n";
print "aunque el programa tenga errores de sintaxis\n"
} END {
print "esto se escribe en la fase 5\n";
print "después que el programa termina \n"}
print "esto se escribe en la fase 4 \n"";
Consejos para el uso de Perl
Para empezar, utilizad a menudo (sobre todo en la fase de editing) la opción -w (como ya se ha dicho, se puede insertar como '#!/usr/bin/perl -w' o como $ perl -w script.pl ; esto os facilitará bastante las cosas, dado que si la ejecución del código se bloquea, a través de la opción -w tendréis mayores posibilidades de entender dónde está el error.
Instrumentos del Perl
El intérprete Perl, una
base de datos y los módulos para la interacción entre los dos; si queréis,
además, llevar los resultados de vuestro trabajo a la web, necesitaréis también
un servidor de web.
Para las pruebas que haremos en estas páginas nos basaremos en el Perl 5.005,
base de datos Postgresql y módulo DBD::Pg.pm. Para quien no cuente con tales
instrumentos, os recordamos que se pueden descargar libremente de la red,
respectivamente de http://www.perl.org
(o bien de http://www.activestate.com
para los porting sobre windows), http://www.postgresql.org e http://www.cpan.org.
Interfaz de la lengua internals y de C
perlembed - cómo encajar el Perl en su programa de C
El Perl puede encajar el Perl en tripa el eliminar errores del Perl de los perldebguts de su uso de C o de C++ y los reemplazos internos de los perlxs del Perl XS del perlxstut de las extremidades del Perl XS de uso de programación del perlclib preceptoral del interfaz para las funciones internas del Perl de C de biblioteca de los perlguts estándares de las funciones para ésos que hacían el Perl del perlcall de las extensiones que llamaba a convenciones del perliol interno perlintern C API de las funciones del Perl del listado del Perl API del perlapi de C (autogenerated) ( autogenerated) para la puesta en práctica del Perl del IO en guía interna de los hackers del Perl del perlhack del interfaz de la abstracción del Perl IO del perlapio de las capas
Para obtener información sobre temas relevantes y comentarios el diario 101 Perl dispone de suscripciones para profesionales que deseen contar con esta excelente herramienta, los precios son accesibles y ofrece varias alternativas a cada usuario.