Está en la página 1de 5

EXPERTOS WEBMASTERS

UN CONTADOR CON ESTADÍSTICAS EN LENGUAJE PERL - PRIMERA PARTE

Programación en Perl
Ya hablamos de ASP, aprendimos qué es PHP, pero nunca
mencionamos nada acerca de este NOBLE LENGUAJE.
Perl permite agregar el buscado DINAMISMO a las
Martín A. SCANDROLI
masc@rec-inf.com.ar
páginas web, realizar consultas y operaciones en BASES
Programador de Perl, C, diseño web y otras yerbas. Actual-
DE DATOS, y mucho más. En esta nota daremos los
mente trabaja en el área de la electromedicina y radiología. primeros pasos con nuestro primer programa Perl.

A principios de los noventa, un


programador llamado Larry Wall
¿Dónde lo puedo utilizar?
Concebido para UNIX, es ahí donde lo-
y_computadoras/Lenguajes_de_programacion/
Perl/).
decidió facilitar las cosas para la elabo- gra su mejor desempeño. Los sistemas
ración de tareas comunes bajo el entor- DOS no tienen un manejo lo suficiente- Es importante aclarar que Perl no actúa
no UNIX. Así decidió crear Perl (Practical mente bueno de los procesos o de la me- ni como compilador ni como intérprete.
Extraction and Report Language, Lengua- moria para lograr el rendimiento ideal de Es más bien un paso intermedio que de
je Práctico de Extracción y Reportes), un Perl, pero existen emuladores que per- aquí en adelante llamaremos “intérprete
lenguaje noble, sencillo y práctico para miten correr scripts, lo cual resulta de de Perl”. Nuestros programas deberán ser
quienes se inician, y para aquellos que gran utilidad para probar los programas escritos en ASCII puro, con extensión
estaban acostumbrados a programar en antes de subirlos al servidor. .pl, luego compilados y ejecutados en el
C o C++. mismo servidor. Para quienes se fanati-
Perl es una excelente herramienta para Programas fuente cen con este lenguaje, ya existen com-
facilitar el procesamiento de grandes Todas las versiones de Perl son de dis- piladores de la versión 5 para crear sus
volúmenes de información sin sacrificar tribución gratuita, e Internet está des- propios .exe.
rendimiento, debido a que basa su pro- bordada de fuentes y recursos disponi-
pia sintaxis en la mayoría de las herra- bles para bajarlos gratuitamente (ver Todo un buen programador
mientas de UNIX. Esta característica ha- Para saber más), pero a la hora de bus- Recuerden que los programas deben
ce de Perl un lenguaje ideal para la ela- car, es una buena idea comenzar con escribirse con suma claridad. Si bien
boración de los CGI en un servidor de Perl.org (www.perl.org), el sitio oficial de esto parece obvio, y muchos lo sabe-
Internet. Perl, o con Yahoo! (ar.dir.yahoo.com/Internet_ mos, son pocos los que siguen esta re-

Figura 1. Formulario de ingreso de Figura 2. Pantalla de salida. Es Figura 3. El editor de textos UltraEdit
usuario. Puede tener el aspecto de importante para confirmar la correcta corriendo Perl. Con la línea perl
nuestro sitio, lo importante es llamar ejecución del script. También es %p%n%e, en la opción [Avanced/
correctamente al cgi. aconsejable que luzca como nuestro DOS Command], con <F9> ejecutamos
sitio. nuestros programas.

68 u s e r s . t e c t i m e s . c o m
Uno de los lenguajes
más nobles y sencillos
para la creación de
páginas web. Con
diversos caminos para
la ejecución de tareas,
se ha convertido en una
alternativa simple y
económica para encarar
proyectos en la Web.

gla. Al escribir hay que ser cuidadoso; posibilidad de tener Linux, o subir los directorio donde está alojado el binario
de lo contrario, no se hallarán ni si- programas al servidor sin mucho gasto de Perl: en la mayoría de los casos,
quiera los propios errores. Lo ideal es telefónico, esto no será necesario. El /usr/bin. Luego, para que corra, debe-
comentar cada función, explicando servidor web Apache (tanto para mos cambiarle las propiedades, de mo-
brevemente qué es lo que hace. En Perl Windows como para Linux) ya viene con do que sea ejecutable:
esto se realiza colocando el símbolo # el intérprete de Perl 5 por defecto. >chmod 755 archivo.pl
delante del texto; de esta forma, el Para realizar los scripts, que como di-
compilador omite lo que se escribió a jimos anteriormente son en ASCII, se Este paso debe realizarse una sola vez
la derecha hasta que encuentra un puede utilizar WordPad, un editor co- por cada archivo nuevo (en general se
<ENTER>. Así, cuando queramos modi- mún, o UltraEdit-32 (www.ultraedit.com), hace en la primera ejecución).
ficar o mejorar un programa, y lo reto- una gran herramienta a la hora de progra- Finalmente, para correrlo sólo basta
memos luego de un largo período, nos mar varias líneas de código (Figura 3). con invocar el archivo por su nombre:
será más fácil identificar las variables, Este último tiene opciones que resultan >archivo.pl
las funciones y el modo de hacer las de gran ayuda a la hora de verificar si lo
cosas. Otra ayuda es la clásica tabula- que hicimos está bien. Analogías con C/C++
ción: cada vez que se abre un bloque Teniendo en cuenta un par de detalles,
(for, while, if, etc.), hay que dejar dos Primeros pasos para los programadores acostumbrados
espacios adelante. En resumen, es Para correr los ejemplos, con Active a trabajar en C, o incluso para los que
aconsejable realizar una escritura clara Perl instalado en la máquina, ejecutamos recibieron nociones básicas de ese len-
y de fácil entendimiento, tanto para la siguiente sentencia en una ventana de guaje, la programación en Perl les resul-
nosotros como para otras personas. MS-DOS, detrás del símbolo de sistema: tará cómoda y sencilla.
C:\pruebas>perl archivo.pl Uno de esos detalles es la forma de
¿Qué necesitamos? declarar las variables. Para ello se les
Una de las herramientas más impor- donde perl es el intérprete del lenguaje antepone un símbolo según su natu-
tantes es Active Perl 5.22 (www.activesta- (perl.exe), y archivo.pl es el script que raleza, por ejemplo, para una variable
te.com/pw32/), que servirá para ejecutar y creamos. escalar del tipo entero sería $va-
probar los programas en la PC bajo Win- En el caso de UNIX hay que indicarle, lor, $a, $b, etc. Para un vector,
dows 32. Para los que cuenten con la siempre dentro del mismo archivo, el en cambio, se le antepone el símbolo
arroba, por ejemplo: @datos1[0].
La ventaja de esto reside en que no
✚ Para saber más debemos preocuparnos por su declara-
✚ FreeCode.com www.freecode.com/cgi-bin/search.pl?query=perl ción, ya que el intérprete se encarga
✚ ActiveState.com www.activestate.com de acomodárselo según su convenien-
✚ Perl.com, mucha info sobre este lenguaje www.perl.com cia (ver Tabla 1, Clases y tipos de
✚ Más material para quemarse el bocho language.perl.com variables).
✚ PerlClinic.com, muy recomendado www.perlclinic.com Veamos un ejemplo:
$dato=”6547CNN”;

u s e r s . t e c t i m e s . c o m 69
EXPERTOS WEBMASTERS

crea la variable escalar dato y le asigna


Tabla 1. Clases y tipos de variables


el valor o cadena 6547CNN. Ahora, si
imprimimos: En esta tabla podemos ver cómo definir las variables para los distintos
print $dato; tipos de datos.

obtendremos como resultado: Clase Símbolo Tipos


6547CNN. Pero, si en cambio queremos Escalar $ Entero, Real, Cadena, Puntero
Vector @ Vector de escalares
sumar dato + 1:
Hash % Vector asociativo de escalares
print $dato+1; Archivo (ninguno) Identificador de archivo

el resultado será el siguiente: 6548,


sin que esto modifique el contenido nuestro será un ejemplo rápido, el cual El código
del escalar dato. Perl toma todos los podrá perfeccionarse y completarse con Sin excepción, en la primera línea de-
caracteres iniciales que formen un nú- más investigación. bemos informar dónde está ubicado el
mero correcto, y ese número es el que La idea es crear una base de datos de binario del intérprete de Perl. Esto se
interpreta. usuarios, quienes emplearán el conta- debe hacer siempre a continuación de
La idea de Perl es simplificar las cosas, dor. Cada uno tendrá una cuenta, que se los símbolos #!, los cuales no son reco-
pero debemos saber bien cómo es que irá incrementando según la cantidad de nocidos por Perl y sí por UNIX. En la
lo hace para no tener problemas. visitas que reciban. Este contador au- mayoría de los servidores el camino es
mentará el número de visitas sólo con /usr/bin, de lo contrario deberán con-
Más similitudes la carga completa de una imagen. Esta sultar al administrador.
Las conocidas herramientas for, while opción la podemos usar con nuestras La siguiente línea es la ubicación,
e if de C también funcionan en Perl; al- páginas web, con amigos o con abona- también en el servidor, pero esta vez de
gunas cambian muy levemente la sinta- dos, mejora de por medio, si tenemos algo conocido: nuestra base de datos.
xis, pero el concepto es exactamente el un servidor de Internet. Este archivo será un ASCII almacenado
mismo. El proyecto completo consta de tres en la carpeta que indiquemos. Por
Los vectores se manejan de la misma módulos. El primero crea la base de da- ejemplo: el directorio /datos dentro de
forma, pero un dato interesante es que tos y agrega nuevos usuarios (Figuras 1 /public en el directorio raíz del espacio
en Perl, para contar los elementos con- y 2). El segundo es el contador propia- en el servidor. Este archivo aún no exis-
tenidos por un vector sólo hace falta la mente dicho, el cual almacena las visi- te, y será creado la primera vez que
siguiente sentencia: tas y una estadística sencilla del nave- agreguemos un usuario.
@vector = ( 100, 102, 103, 104); gador que estaba usando el internauta Luego invocamos una a una las distin-
#una rápida forma de cargar los da- que entró en la página. El tercero y úl- tas subrutinas, las que serán declaradas
tos. timo es el que presenta el informe de a continuación del programa principal
$cant_elem = @vector; toda la data recolectada. (dentro del mismo archivo .pl). El sím-
#una más rápida forma de Veamos el primer ejemplo, mientras bolo & delante de cada subrutina es el
contar cuántos elementos hay. avanzamos en la explicación. Lo pri- equivalente al $ para los escalares y @
mero que haremos es pasarle la infor- para los vectores. Esto le indica a Perl
El valor de $vector[2] será 103 y el mación a nuestro script de Perl me- que debe ejecutar esa subrutina, la cual
de $cant_elem es 4. diante un formulario (formula- debe ser declarada más adelante. Fíjen-
rio.html) con el método GET. Esto nos se que en la declaración no lleva el sím-
Manos a la obra permitirá ver en la barra de navegación bolo &, sino que se le antepone la pa-
El proyecto completo que realizare- cómo es enviada. Encontrarán todo el labra sub.
mos será un contador con estadísticas; código completo en la carpeta WEB- La primera de estas subrutinas es
algo parecido al que solemos usar en MASTERS del CD: &parseform; tan complicada de explicar
las páginas web, como el de TheCoun- <form name=”form1” method=”get” ac- como necesaria. Por ahora recomiendo
ter.com o el de Ciberstats.com. El tion=”../cgi-bin/agregar.pl”> que la copien tal cual está cada vez que
la necesiten. La forma como lo hace ex-
Lugares que corren Perl cede a nuestro primer acercamiento de

esta nota y dejaremos esta explicación


Para muestra basta un botón, así que no dejen de visitar alguno de los para más adelante; pero lo que hace es
sitios que basan su funcionamiento en Perl. sencillo. Es una de las piezas fundamen-
Terra, el famoso portal, utiliza este lenguaje www.terra.com.ar tales: la rutina encargada de analizar el
VideoMovil, el primer sitio de alquileres online www.videomovil.com.ar formulario HTML que llama a nuestro
Otro sitio que funciona gracias a este lenguaje use.perl.org cgi, y de adaptar los datos ingresados
(tanto en modo GET como en POST) pa-

70 u s e r s . t e c t i m e s . c o m
LISTADO 1 - Agregar. pl </td>
#!/usr/bin/perl <td>
<b>$email</b>
$BaseDatos = “/server/www/www.midominio.com.ar/public- </td>
/datos/usuarios.txt”; </tr>
<tr>
# COMIENZO DEL PROGRAMA <td>
# de la siguiente forma invoco las diferentes subruti- <div align=”right”>Tipo de contador</div>
nas o funciones. </td>
&parseform; #analiza el formulario <td>
&ObtenerInfo; #recupera la información anterior <b>$tipo</b>
&Agregar; #agrega el usuario a la base de datos </tr>
&Salida; #Muestra una pantalla de salida </table>

# FIN DEL PROGRAMA HTML


#IMPORTANTE: Debe estar escrita pegada al margen y sin
# Obtengo la información del pedido nada a la derecha
sub ObtenerInfo # de lo contrario Perl no la reconoce.
{ }
$nombre = $FORM{‘nombre’};
$email = $FORM{‘email’}; # Subrutina Parseform (Análisis de formularios).
$tipo = $FORM{‘tipo’}; # Uso: copiá y pegá esta función dentro de tu script
} CGI cuando necesités recolectar información de un for-
mulario, luego invocá &parseform;
#Agrego el nuevo usuario # La data es almacenada en el vector asociativo %FORM.
sub Agregar Para acceder usá la forma $FORM{‘nombre_del_campo’}.
{ sub parseform
open(USUARIOS, “>>$BaseDatos”) || open(USUARIOS, {
“>$BaseDatos”); if ($ENV{‘REQUEST_METHOD’} eq ‘GET’) {@pairs =
print USUARIOS “0|$nombre|$email|$tipo\n”; split(/&/, $ENV{‘QUERY_STRING’});}
close (USUARIOS); elsif ($ENV{‘REQUEST_METHOD’} eq ‘POST’)
} {
read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH’});
sub Salida @pairs = split(/&/, $buffer);
{ }
print “Content-type: text/html\n\n”; else
print <<HTML; #Imprime todo lo que sigue a continua- {
ción (por ejemplo el HTML de salida) hasta que encuen- print “Content-Type: text/html\n\n”;
tra la cadena “ETIQUETA” print “<HTML><h2>Bad or unknown request met-
hod.</h2></HTML>”;
<h1>Base de datos</h1><hr> exit(0);
<p>Ingreso del usuario satisfactorio:</p> }
<table width=”95%” border=”0” cellspacing=”1” cellpad- foreach $pair (@pairs)
ding=”1” align=”center”> {
<tr> local($name, $value) = split(/=/, $pair);
<td> $name =~ tr/+/ /;
<div align=”right”>Nombre</div> $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, he-
</td> x($1))/eg;
<td> $value =~ tr/+/ /;
<b>$nombre</b> $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, he-
</td> x($1))/eg;
</tr> $value =~ s/<!—(.|\n)*—>//g;
<tr> $FORM{$name} = $value;
<td> }
<div align=”right”>e-mail</div> }

u s e r s . t e c t i m e s . c o m 71
EXPERTOS WEBMASTERS

ra que sea comprendido por nuestro to para usar y, a continuación, le siguen Internet, aparecieron las páginas perso-
programa. En pocas palabras: almacena los demás campos. Un ejemplo de base nales y se popularizaron los tutoriales y
los valores ingresados separados por los de datos sería el siguiente: demás sitios que ofrecen herramientas,
nombres que se les asignaron en los 0|Martín|martins@hotmail.com|1 cursos y tutoriales en línea.
campos de los formularios. En nuestro 0|Pikachu|pikachu@pokemon.com|1 Es así que ahora es muy fácil encon-
caso son $FORM{‘nombre’}, para ex- 0|Andrea|andreag@yahoo.com|2 trar lo que buscamos en cuestión de mi-
traer el dato ingresado en el campo lla- nutos, podemos imprimirlo y leerlo off-
mado nombre; $FORM{‘email’}, para el El último campo es el que usaremos line en el lugar en que estemos.
campo email, y así los demás. para saber las preferencias del usuario, Si vamos a comentar algunos de los
Una vez analizado el formulario, esta- si queremos que el contador sea exhibi- mejores sitios para aprender este len-
mos en condiciones de tomar esa infor- do, o no, que simplemente figure una guaje, no podemos olvidarnos de
mación asignándola a variables escala- publicidad o un logo. Perl.org (www.perl.org), el sitio oficial,
res comunes. Esto lo hacemos en la se- Por último, la presentación final, uti- donde hallaremos mucha información.
gunda rutina llamada &ObtenerInfo;, lizada para transmitirle al usuario que el No está en castellano pero, para los que
que nada más asigna los campos ante- programa se ejecutó normalmente. dominan el idioma inglés, les será de
riormente analizados en las nuevas va- Otra de las sentencias clásicas de Perl, gran ayuda.
riables escalares. obligada si queremos enviar texto a la Si visitan Los Tutoriales (www.lostuto-
La tercera rutina es &agregar, encar- pantalla del navegador, es print “Con- riales.com) o Programación.Net (www.pro-
gada de adicionar todos los datos obte- tent-type: text/html\n\n”;. Debemos gramacion.net), ambos comentados en la
nidos al final de la base de datos de avisarle al browser lo que vamos a en- nota de tapa de esta revista, podrán
usuarios del sistema. viarle a continuación. Inmediatamente encontrar una gran cantidad de recur-
Lo que vemos son dos Opens separa- después, estamos listos para pasarle el sos gratuitos y tutoriales, sobre este y
dos por el operador || (doble pipe), código HTML que queremos mostrar, y la otros lenguajes similares. Otro sitio
que se encarga de decirle al intérprete forma más sencilla de hacerlo es con parecido que les será de gran ayuda es
de Perl que si falla la primera función, etiquetas. Webexperto (www.webexperto.com.ar). Si
es decir, si da algún error, ejecute la se- Con la sentencia print <<HTML; deci- bien no tiene una gran cantidad de
gunda. Entonces intenta abrir el archi- mos que imprima todo lo que sigue de- links, seguro que descubrirán algo de
vo en modo agregar al final (operador bajo (incluso líneas comentadas con utilidad.
>> delante del nombre del archivo). Si #), hasta que encuentre la etiqueta con
el archivo no existe, crea uno nuevo, el nombre que le asignamos, por ejem- Finalmente
vacío, listo para ingresar información plo HTML. Esta palabra debe escribirse Como vimos hasta aquí, Perl se con-
(operador >). en el margen izquierdo sin ningún es- vierte en una opción más que intere-
El nombre del archivo fue dado al co- pacio, ni delante ni detrás, y con un sante y, sobre todo, económica para
mienzo e ingresado en la variable $Ba- <ENTER> para finalizar (tampoco lleva construir un sitio con contenido diná-
seDatos. También, dentro de la fun- el punto y coma). mico e interactivo. Además, gracias a
ción open, le asignamos una etiqueta los servidores web como Apache, tanto
que identifique a este archivo abierto, Dónde aprender Perl para Windows, como para Linux, pode-
para poder manejarlo y direccionarle la Hasta hace muy poco tiempo, era mos mantenerlo fácilmente en nuestra
información. Inmediatamente después muy difícil aprender un nuevo lenguaje propia PC sin necesidad de subirlo al
agregamos la línea que contiene la in- de programación por cuenta propia. servidor cada vez que queremos ver al-
formación del usuario de un modo sen- Los textos o libros generalmente eran gún cambio o probar algo.
cillo: imprimimos en el archivo identi- difíciles de conseguir y, en la mayoría Tampoco nos olvidemos de que, por
ficado con el nombre USUARIOS la lí- de los casos, venían en inglés, lo cual sobre todas las cosas, es una alternati-
nea que contiene los datos que ingre- los limitaba solamente a un grupo va muy económica y que no requerirá de
samos en el formulario. reducido de personas. inversiones costosas en cuanto a siste-
La base de datos será un archivo AS- Afortunadamente, con la llegada de mas operativos y hardware. ✕
CII que contendrá los distintos campos
separados por el signo | (pipe); elegido Dónde alojar Perl

arbitrariamente. Este signo podría ha-


ber sido cualquiera, lo importante es Éstos son sólo algunos de los sitios que ofrecen soporte para alojar
usar uno que sepamos que nunca será páginas desarrolladas en Perl.
ingresado en el formulario. En otra oca- Rec-Inf, recursos informáticos www.rec-inf.com.ar
sión veremos cómo identificarlo. Es im- Adn-Net www.adn-net.com.ar/hosting.html
portante que no tenga retornos de ca- Rayp.com www.rayp.com/hosting.htm
rro (<ENTER> o \n) en medio de cada Neco.com.ar, Web hosting www.neco.com.ar/webpoint/hosting.html
línea. El cero inicial es el contador lis-

72 u s e r s . t e c t i m e s . c o m