A
continuación se presenta una recopilación de la información más relevante e
importante sobre el Lenguaje Perl
En la Infografía se presentan ocho papers referentes a este tema
¿Para qué sirve? - ¿ Dónde puede usarse?
¿Cómo se hace
un programa en Perl?
Estructura Básica de un Programa
Siglas de Practical Extraction and
Reporting Language, algo así como Lenguaje Práctico de Extracción y de
Informes. Perl es un Lenguaje
desarrollado por Larry Wall (por cierto que es uno de los net.gods más
conocidos en la actualidad), que estructuralmente presenta una mezcla de
elementos del lenguaje C y de sentencias del entorno UNIX.
Este es uno de los lenguajes más utilizados para la creación de
programas CGI en los servidores Web. Perl
es más rápido que los programas shell script de UNIX, puede leer y escribir
ficheros binarios, y puede procesar ficheros grandes.
Es un lenguaje especialmente útil para llevar a cabo procesos con
ficheros y cadenas de texto, tareas de mantenimiento en sistemas UNIX y entornos
de redes, y programación de scripts-cgi en la World Wide Web.
Perl es un lenguaje interpretado, aunque en realidad, el intérprete de
Perl, como todos los intérpretes modernos, compila los programas antes de
ejecutarlos. Por eso se habla de
scripts, y no de programas, concepto referido principalmente a programas
compilados al lenguaje máquina nativo del ordenador y sistema operativo en el
que se ejecuta.
Las ventajas más importante de Perl son:
Perl no necesita ser
recopilado.
Construcción de pequeños programas que pueden ser usados como filtros
para obtener información de ficheros, realizar búsquedas, ...
También es uno de los lenguajes más utilizados en la programación CGI
scripts, que son guiones o scripts que utilizan el interface CGI (Common Gateway
Interface), para intercambio de información entre aplicaciones externas y
servicios de información. Como ejemplo de
ello tenemos los programas de búsqueda usados por el browser Netscape.
Se puede utilizar en varios entornos, como puede ser Windows 95,
OS/2,..., sin realizar cambios de código, siendo únicamente necesario la
introducción del intérprete PERL correspondiente a cada sistema operativo.
El mantenimiento y depuración de un programa en PERL es mucho más
sencillo que la de cualquier programa en C.
A pesar de que la versión actual del intérprete de Perl es la 5, es muy
habitual, sin embargo, encontrar la versión 4.036, el último patchlevel de la
versión 4 y probablemente el más estable.
Actualmente, en enero del 2000, la versión 5.005 es suficientemente
estable como para usarla en cualquier plataforma.
La versión 5 es prácticamente compatible 100% con la 4; virtualmente
todos los scripts que funcionan para la versión 4 lo hacen también en la 5.
Prácticamente, sirve para todo. Todas las tareas de administración de UNIX se pueden
simplificar con un programa en Perl. Se
usa también para tratamiento y generación de ficheros de texto. También hay proyectos completos y complejos escritos en
Perl, pero son los menos.
La forma del lenguaje facilita la programación rápida y sucia, el hacer
un programa rápido para que funcione. Esto
hace también que se utilice para hacer prototipos rápidos de algún algoritmo
que queremos ver funcionar antes que tomarnos la molestia de programarlo en un
lenguaje más eficiente, como el C++. Y
últimamente ha encontrado su aplicación la escritura de CGI o scripts
ejecutados desde páginas de la World Wide Web.
La mayoría de los programas que se encuentran uno para procesar
formularios en la Internet llevan la extensión .pl, lo cual denota que están
escritos en Perl.
Surge como una opción para una gran cantidad de
herramientas de UNIX en las cuales basa su propia sintaxis, buscando el mínimo
sacrificio de su desempeño por una máxima facilidad de programación e
integración, sigue la filosofía de mantener un ambiente que sea capaz de
detectar y corregir pequeñas omisiones del programador, y de proporcionarle una
forma abreviada de realizar múltiples tareas.
En una palabra, es una utilería que pretende facilitar el proceso de
grandes volúmenes de información sin sacrificar el rendimiento.
¿Dónde
se puede usar?
Las plataformas donde Perl se ha desarrollado más son los servidores
UNIX, por sus necesidades de administración y lo robusto de su manejo de
memoria y de procesos (requisitos de PERL hacia el SO) además de la facilidad
de Perl para realizar los así llamados CGIs, interfaces para comunicar recursos
del servidor con un servidor de Internet particular (como podría ser WWW o
gopher). En otras plataformas, PC
en particular, se han desarrollado versiones que mantienen un razonable grado de
funcionalidad, pero en realidad, el sistema DOS no tiene un manejo lo bastante
bueno de los procesos o de la memoria para permitir a Perl dar un buen desempeño,
además de que no es común ver en PC necesidades de administración de la
magnitud de un servidor institucional. Sin
embargo, puede practicarse la programación en Perl de PC, o incluso elaborar
programas de reporteo en él, sin embargo, es algo que no se ha popularizado
hasta hoy.
Basta con escribir las instrucciones que lo componen
con un editor de texto, y grabarlo como fichero de texto “ASCII” (texto
simple, sin formato tipo Word o Word Perfect, etc.).
Las siguientes líneas son un ejemplo de un programa Perl:
($segundos,
$minutos,
$hora,
$dia,
$mes)
= localtime;
print “Son las $hora:$minutos\n”;
Los tipos de datos que se pueden utilizar en el Perl son:
Escalares
Array de Escalares
Array Asociativos de Escalares
El tipo de dato Escalar es denotado mediante un nombre de variable
precedido del símbolo $,
y puede contener un número, una cadena de caracteres y una cadena de caracteres
en la que alguno de los caracteres puede ser un carácter especial.
Por ejemplo, si queremos definir una variable de tipo escalar llamada número
y que contenga un número 12 haríamos: $numero
= 12;
Para almacenar una cadena de caracteres podemos hacer dos cosas:
Definir el contenido entre comillas simples, no interpretándose ningún
caracter especial contenido entre ellas, un ejemplo podría ser:
$palabra
= ‘perros’;
Definir el contenido entre comillas dobles, interpretándose cualquier
caracter especial contenido entre ellas a la hora de la impresión de la cadena,
un ejemplo podría ser:
$palabra
= “perros\n”;
Por último, se puede definir varias variables al mismo tiempo utilizando
los paréntesis, por ejemplo:
($palabra,
$palabra2,
$palabra3)
= (“Juan”,”Pepe”,”Luis”);
El tipo de dato Array de Escalares es denotado mediante un nombre
de variable precedido del símbolo @. Un
ejemplo de inicialización de una variable de este tipo podría ser:
@Frutas = (“manzana”,”pera”,”naranja”,”fresa”)
El número de elementos menos uno de un array de escalares se puede
obtener mediante el nombre de la variable precedido de los símbolos $#,
por ejemplo si se quiere obtener el número de elementos de @frutas se haría:
$numero_de_elementos
= $#frutas+1;
Para ser más exactos $#
devuelve el último índice del array, así, si el valor para el primer índice
es 0 el número de elementos – 1 será el último valor permitido para indexar
el array. El acceso a un elemento
de un array se hace mediante un índice numérico de la forma $nom_variable
[ índice ]; así, si se quiere acceder al tercer elemento de @frutas se haría:
$2
elemento = $frutas[2];
También se puede acceder a varios elementos de un array de la forma
@nom_variable [indice1,...,indicen]; por ejemplo:
Print @frutas[1,2]; imprimirá
el elemento segundo del array @frutas.
Otra forma de indexar un array es usando el operador rango.., si se
quiere imprimir todos los valores desde un índice i hasta un índice j, se
deberá utilizar el siguiente formato @nom_variable[i..j], por ejemplo:
Print @frutas[0..2]; imprimirá
todos los elementos del array @frutas.
Por último se tiene el tipo de dato Array Asociativo de Escalares,
mediante este tipo de datos podemos acceder a un determinado elemento de un
array a través de una clave anteriormente definida, para denotar este tipo de
dato se debe preceder al nombre de la variable con el símbolo %.
Un ejemplo de definición de claves y valores de un determinado array
asociativo podría ser:
%precio =
(“manzana”,100,”pera”,20,”naranja”,30,”fresa”,200);
Si se quiere acceder a un elemento de un array asociativo, se debe seguir
el siguiente formato @nom_variable {clave}, un ejemplo podría ser:
$numero
de manzanas=10;
$gasto
= @precio {“manzana”} * $numero
de manzanas;
Operadores de Comparación:
mediante estos operadores se pueden enfrentar dos expresiones, de manera,
que dependiendo de su valor se genera un resultado que puede ser lógico o numérico.
Perl tiene los siguientes operadores de comparación:
==
Este operador sirve para comparar dos valores iguales, de manera que
cuando las expresiones a su izquierda y su derecha son iguales, devuelve un
valor lógico verdadero y cuando no lo son devuelve falso:
if
($var
== 3) {...}
eq.
Es empleado para comparar expresiones no numéricas,
esto es, se utiliza de igual manera que == pero para cadenas.
!=
Con este operador se comparan cantidades numéricas diferentes.
If
($var
!= 3) {…}
ne.
Se utiliza para comparar cantidades no numéricas
diferentes. Su funcionamiento es
similar que el de !=.
<
Verifica el valor de una cantidad numérica con respecto del valor de la
expresión de la derecha, de modo que si el valor d esta expresión es mayor que
el de la cantidad numérica se devuelve cierto, en caso contrario se devuelve
falso:
if ($var < 3) {...}
>
Verifica el valor de una cantidad numérica con respecto del valor de la
expresión de la derecha, de modo que si el valor de esta expresión es menor
que el de la cantidad numérica se devuelva cierto, en caso contrario se
devuelve falso:
if
($var
> 3) {...}
cmp.
Este término es utilizado para comparar caracteres,
de manera que, retorna 0 si los caracteres comparados son iguales, 1 si la
cadena de la derecha se encuentra al comienzo de la izquierda, y –1 en el caso
contrario:
‘one’
cmp ‘one’
devuelve
0
‘one dog’ cmp ‘one’
devuelve
1
‘dog one’ cmp ‘one’
devuelve –1
‘es diferente’ cmp ‘one’
devuelve –1
<=> Este
término es utilizado para comparar valores numéricos, retornando 0 cuando son
iguales, 1 cuando el término de la derecha es menor que el de la izquierda y
–1 en el caso contrario.
=%
Este
término es usado en las expresiones regulares para indicar la presencia de un
patrón de comparación dentro de una variable que contiene una cadena de
caracteres:
if
($var
=%/pepe/)
{...}
!%
Mediante este operador se verifica la no
existencia del patrón de búsqueda en una cadena:
if
($var
!%/pepe/)
{...}
si
la cadena ‘pepe’ no está en var se ejecuta el código entre llaves
Operadores de Asignación: los
términos de asignación se utilizan en Perl para dar valores a cualquiera de
las variables válidas en Perl. Existen
en Perl los siguientes operadores de asignación:
=
Con este término se asigna a la variable que se encuentra a la izquierda
del operador el valor de la expresión de la derecha. Así mediante este valor se pueden dar valores iniciales a
cualquier variable:
$var = ‘Buenos días’;
asigna la cadena Buenos días a
la variable var.
=%
A parte de la función de verificación de existencia de un patrón
dentro de una cadena que anteriormente se explico, este operador dentro de una
expresión regular de sustitución se utiliza para sustituir un patrón de
comparación por otra cadena:
$var
=%
s/one/uno/;
se
reemplaza la ocurrencia de la cadena ‘one’ por la cadena ‘uno’.
Operadores Aritméticos:
Mediante estos términos se realizan las operaciones aritméticas
necesarias para el manejo de las expresiones.
A parte de los operadores aritméticos comunes; + (suma), - (resta), *
(multiplicación) y / (división), Perl también incluye los siguientes
operadores:
**
Este término se emplea para obtener la potencia de un valor numérico,
ejemplo:
$var
= 6;
$var**2;
el valor almacenado en var es
36.
. Este
término se emplea para concatenar dos cadenas de caracteres, ejemplo:
$var
= ‘Juan’;
$var
. ‘Ramírez’;
var contendrá la cadena Juan
Ramírez.
x Este
término multiplica n veces la cadena de caracteres especificada, ejemplo:
‘d’ x 20;
expresa una cadena de 20
caracteres d.
%
Permite obtener el módulo de la división entre dos números, ejemplo:
$var
= 5 % 2;
el valor que se asigna a var es
1.
¡
Este término cuando se emplea entre 2 valores numéricos, permite
realizar una operación binaria ‘0’ entre ellos, ejemplo:
$var
= 3 ¡ 2;
el valor que se asigna a la
variable es 3.
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 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.
Otro Ejemplo:
$saludo
= “Hola Mundo”;
print $saludo;
$saludo
= “Adiós Mundo”;
print $saludo;
$saludo
= 100
print $saludo
+ 10
El resultado impreso sería:
Hola Mundo Adiós Mundo 110
Para añadir saltos de línea se debe utilizar al final de cada instrucción
de print el siguiente código: \n y así se visualiza el mensaje en líneas
separadas.
Variables Especiales
$_
Almacena la línea completa que ha sido leída.
$`
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:
$_
= “Me gustan las Fresas y el Chocolate”;
/Fresas/;
print $,
“\n”;#”Me gustan los”
print $,”\n”;#”y
el Chocolate”
print $&,
“\n”;#”Fresas”
print $`.$&.$’;#Igual
que $_
Variables
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. Ejemplo:
#Edición directa con Perl
#Buscar y reemplazar todas las cadenas html por HTML
#Teclear:
Perl edicdir.pl <unhtml.htm doshtml.htm
$ÙI
= “.bak”;
while
(<>) {
s/html/HTML/g,
print;
}
#Si quieres probar otra vez teclea COPHTML.BAT
#Este
fichero copia unhtml.hhh a unhtml.htm y doshtml.hhh a doshtml.htm
#reconstruyendo ambos html para una nueva ejecución.
Valores: Los valores son las cosas que uno mete a las variables.
En Perl los valores se guardan separados de las variables e incluso cada
valor tiene un contador que indica cuantas variables lo están usando.
Cuando el contador es cero el valor desaparece.
Los valores más usados son:
STRING:
Los String pueden escribirse con comillas dobles o simples
$a
= “abcd”:
$a
= ‘abcd’;
Cuando
se usa doble comilla se pueden intercalar variables escalares y arreglos.
En el resultado final la variable se sustituye por su valor.
LISTAS:
Por ejemplo:
$a
= (2, 7, ‘sss’);
#
$a queda con el último valor: ‘sss’
@a
= (2, 7, ‘sss’);
$a
= @a;
#
$a queda con el número de elementos de @a: 3
note
que (2, 7, ‘sss’) es un valor, mientras que @a es un arreglo (recuerde que
las variables y los valores son dos cosas distintas)
Existen
abreviaturas para algunas listas:
$a
= (2..7);
#
$a queda con (2,3,4,5,6,7);
$a
= (‘a’..’e’);
#
$a queda con (‘a’,’b’,’c’,’d’,’e’)
STRINGS
con Comillas:
Las comillas invertidas se comportan como en los shelles de UNIX. Entre
las comillas invertidas se pueden intercalar variables escalares.
Entre las comillas dobles se puede intercalar comillas invertidas.
Asociar un valor con una variable se llama bind.
Perl
no obliga a casi nada, pues, lo que planteo como estructura básica es más bien
una convención que un requisito del lenguaje, a diferencia de Pascal (por
ejemplo) Perl no tiene una plantilla para sus programas y si se adoptan algunos
protocolos es sólo por comodidad.
Los
programas de Perl, por lo regular, inician con la línea:
#!/usr/bin/perl
Esta
línea, indica al Sistema Operativo que lo que sigue es un script de Perl, y que
“Perl” (el programa con el cual debe ejecutarse) está en el directorio
“/usr/bin”, la secuencia “#!” es una secuencia que UNIX reconoce, no
Perl.
Un método
alterno, que funciona para otras plataformas, es: en lugar de colocar esa
primera línea ejecutamos:
Perl
nombre_del_script.pl de modo que directamente se ejecuta el intérprete de Perl
pasándole como primer parámetro el script a ejecutar (los demás parámetros
se tomarán como parámetros al programa).
Si se requiere deberá sustituirse “Perl” por la ruta completa del
programa y el nombre que el programa tenga.
Para los ejemplos sucesivos, se tomará la suposición de que se trabaja
en un Sistema UNIX con el intérprete de Perl en el directorio “/usr/bin”.
Y eso es
toda la estructura básica.
Programa
Hola mundo:
#!/usr/bin/perl
print
“Hola a Todo el Mundo\n”; #Saluda
#Programa
Hola a todo el Mundo, María Salcedo, 2001, como parte del diseño de la página
web de los conocimientos básicos de Perl
Este
programa, se escribe como un archivo de texto común y su ejecución será
posible si lo diseño en Perl, aquí sólo se visualiza el ejemplo del programa.
La
ejecución en un Sistema UNIX podría verse como sigue a continuación:
>chmod
700 Hola.pl
>Hola.pl
Hola
Todo el Mundo
>Hola.pl
Hola
Todo el Mundo
>
#!/usr/bin/perl
Esta
línea no es parte del script de Perl, sino una instrucción al Sistema
Operativo para indicar que las siguientes líneas deberán interpretarse por el
programa “usr/bin/Perl”, si se omite, o no funciona en el sistema operativo,
podemos ejecutar el programa de la siguiente forma:
>/usr/bin/Perl
Hola.pl
Hola
Todo el Mundo
>print
“Hola Todo el Mundo\n”; #Saluda
Esta
es la única instrucción del programa y está acompañada por un comentario, la
instrucción es:
print
“Hola Todo el Mundo\n”;
Que
pudo ser escrita como:
print
(“Hola Todo el Mundo\n”);
sin
que esto implicara el mínimo cambio en funcionalidad.
A
continuación se muestra el comentario:
#Saluda
|