Está en la página 1de 5

EXPERTOS WEBMASTERS

UN CONTADOR CON ESTADSTICAS EN LENGUAJE PERL - PRIMERA PARTE

Programacin 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
Martn A. SCANDROLI
masc@rec-inf.com.ar
pginas web, realizar consultas y operaciones en BASES
Programador de Perl, C, diseo web y otras yerbas. Actual-
DE DATOS, y mucho ms. En esta nota daremos los
mente trabaja en el rea de la electromedicina y radiologa. primeros pasos con nuestro primer programa Perl.

A principios de los noventa, un


programador llamado Larry Wall
Dnde 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 desempeo. Los sistemas
racin de tareas comunes bajo el entor- DOS no tienen un manejo lo suficiente- Es importante aclarar que Perl no acta
no UNIX. As decidi crear Perl (Practical mente bueno de los procesos o de la me- ni como compilador ni como intrprete.
Extraction and Report Language, Lengua- moria para lograr el rendimiento ideal de Es ms bien un paso intermedio que de
je Prctico de Extraccin y Reportes), un Perl, pero existen emuladores que per- aqu en adelante llamaremos intrprete
lenguaje noble, sencillo y prctico para miten correr scripts, lo cual resulta de de Perl. Nuestros programas debern ser
quienes se inician, y para aquellos que gran utilidad para probar los programas escritos en ASCII puro, con extensin
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 versin 5 para crear sus
volmenes de informacin sin sacrificar tribucin gratuita, e Internet est des- propios .exe.
rendimiento, debido a que basa su pro- bordada de fuentes y recursos disponi-
pia sintaxis en la mayora de las herra- bles para bajarlos gratuitamente (ver Todo un buen programador
mientas de UNIX. Esta caracterstica ha- Para saber ms), 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
boracin 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 lnea perl
nuestro sitio, lo importante es llamar ejecucin del script. Tambin es %p%n%e, en la opcin [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
ms nobles y sencillos
para la creacin de
pginas web. Con
diversos caminos para
la ejecucin de tareas,
se ha convertido en una
alternativa simple y
econmica 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 hallarn ni si- programas al servidor sin mucho gasto de Perl: en la mayora de los casos,
quiera los propios errores. Lo ideal es telefnico, esto no ser necesario. El /usr/bin. Luego, para que corra, debe-
comentar cada funcin, 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 smbolo # el intrprete 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- mn, o UltraEdit-32 (www.ultraedit.com), hace en la primera ejecucin).
ficar o mejorar un programa, y lo reto- una gran herramienta a la hora de progra- Finalmente, para correrlo slo basta
memos luego de un largo perodo, nos mar varias lneas de cdigo (Figura 3). con invocar el archivo por su nombre:
ser ms fcil 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 clsica tabula- que hicimos est bien. Analogas con C/C++
cin: 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 mquina, ejecutamos recibieron nociones bsicas de ese len-
y de fcil entendimiento, tanto para la siguiente sentencia en una ventana de guaje, la programacin en Perl les resul-
nosotros como para otras personas. MS-DOS, detrs del smbolo de sistema: tar cmoda 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 ms impor- donde perl es el intrprete del lenguaje antepone un smbolo segn 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 sera $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 smbolo
arroba, por ejemplo: @datos1[0].
La ventaja de esto reside en que no
Para saber ms debemos preocuparnos por su declara-
FreeCode.com www.freecode.com/cgi-bin/search.pl?query=perl cin, ya que el intrprete se encarga
ActiveState.com www.activestate.com de acomodrselo segn su convenien-
Perl.com, mucha info sobre este lenguaje www.perl.com cia (ver Tabla 1, Clases y tipos de
Ms 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 cmo definir las variables para los distintos
print $dato; tipos de datos.

obtendremos como resultado: Clase Smbolo 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 rpido, el cual El cdigo
del escalar dato. Perl toma todos los podr perfeccionarse y completarse con Sin excepcin, en la primera lnea de-
caracteres iniciales que formen un n- ms investigacin. bemos informar dnde est ubicado el
mero correcto, y ese nmero es el que La idea es crear una base de datos de binario del intrprete de Perl. Esto se
interpreta. usuarios, quienes emplearn el conta- debe hacer siempre a continuacin de
La idea de Perl es simplificar las cosas, dor. Cada uno tendr una cuenta, que se los smbolos #!, los cuales no son reco-
pero debemos saber bien cmo es que ir incrementando segn la cantidad de nocidos por Perl y s por UNIX. En la
lo hace para no tener problemas. visitas que reciban. Este contador au- mayora de los servidores el camino es
mentar el nmero de visitas slo con /usr/bin, de lo contrario debern con-
Ms similitudes la carga completa de una imagen. Esta sultar al administrador.
Las conocidas herramientas for, while opcin la podemos usar con nuestras La siguiente lnea es la ubicacin,
e if de C tambin funcionan en Perl; al- pginas web, con amigos o con abona- tambin 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 mdulos. 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 raz del espacio
en Perl, para contar los elementos con- y 2). El segundo es el contador propia- en el servidor. Este archivo an no exis-
tenidos por un vector slo hace falta la mente dicho, el cual almacena las visi- te, y ser creado la primera vez que
siguiente sentencia: tas y una estadstica 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 rpida forma de cargar los da- que entr en la pgina. El tercero y l- tas subrutinas, las que sern declaradas
tos. timo es el que presenta el informe de a continuacin del programa principal
$cant_elem = @vector; toda la data recolectada. (dentro del mismo archivo .pl). El sm-
#una ms rpida forma de Veamos el primer ejemplo, mientras bolo & delante de cada subrutina es el
contar cuntos elementos hay. avanzamos en la explicacin. 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 macin 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 ms adelante. Fjen-
rio.html) con el mtodo GET. Esto nos se que en la declaracin no lleva el sm-
Manos a la obra permitir ver en la barra de navegacin bolo &, sino que se le antepone la pa-
El proyecto completo que realizare- cmo es enviada. Encontrarn todo el labra sub.
mos ser un contador con estadsticas; cdigo 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 pginas 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 explicacin


Para muestra basta un botn, as que no dejen de visitar alguno de los para ms 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 informacin 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 informacin del pedido nada a la derecha
sub ObtenerInfo # de lo contrario Perl no la reconoce.
{ }
$nombre = $FORM{nombre};
$email = $FORM{email}; # Subrutina Parseform (Anlisis de formularios).
$tipo = $FORM{tipo}; # Uso: copi y peg esta funcin dentro de tu script
} CGI cuando necesits recolectar informacin 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- {
cin (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 continuacin, le siguen Internet, aparecieron las pginas perso-
programa. En pocas palabras: almacena los dems campos. Un ejemplo de base nales y se popularizaron los tutoriales y
los valores ingresados separados por los de datos sera el siguiente: dems sitios que ofrecen herramientas,
nombres que se les asignaron en los 0|Martn|martins@hotmail.com|1 cursos y tutoriales en lnea.
campos de los formularios. En nuestro 0|Pikachu|pikachu@pokemon.com|1 Es as que ahora es muy fcil encon-
caso son $FORM{nombre}, para ex- 0|Andrea|andreag@yahoo.com|2 trar lo que buscamos en cuestin 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 dems. 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
macin asignndola 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 presentacin final, uti- donde hallaremos mucha informacin.
gunda rutina llamada &ObtenerInfo;, lizada para transmitirle al usuario que el No est en castellano pero, para los que
que nada ms asigna los campos ante- programa se ejecut normalmente. dominan el idioma ingls, les ser de
riormente analizados en las nuevas va- Otra de las sentencias clsicas 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 Programacin.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, podrn
usuarios del sistema. viarle a continuacin. Inmediatamente encontrar una gran cantidad de recur-
Lo que vemos son dos Opens separa- despus, estamos listos para pasarle el sos gratuitos y tutoriales, sobre este y
dos por el operador || (doble pipe), cdigo HTML que queremos mostrar, y la otros lenguajes similares. Otro sitio
que se encarga de decirle al intrprete forma ms sencilla de hacerlo es con parecido que les ser de gran ayuda es
de Perl que si falla la primera funcin, etiquetas. Webexperto (www.webexperto.com.ar). Si
es decir, si da algn 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 descubrirn algo de
vo en modo agregar al final (operador bajo (incluso lneas 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
vaco, listo para ingresar informacin plo HTML. Esta palabra debe escribirse Como vimos hasta aqu, Perl se con-
(operador >). en el margen izquierdo sin ningn es- vierte en una opcin ms que intere-
El nombre del archivo fue dado al co- pacio, ni delante ni detrs, y con un sante y, sobre todo, econmica para
mienzo e ingresado en la variable $Ba- <ENTER> para finalizar (tampoco lleva construir un sitio con contenido din-
seDatos. Tambin, dentro de la fun- el punto y coma). mico e interactivo. Adems, gracias a
cin open, le asignamos una etiqueta los servidores web como Apache, tanto
que identifique a este archivo abierto, Dnde aprender Perl para Windows, como para Linux, pode-
para poder manejarlo y direccionarle la Hasta hace muy poco tiempo, era mos mantenerlo fcilmente en nuestra
informacin. Inmediatamente despus muy difcil aprender un nuevo lenguaje propia PC sin necesidad de subirlo al
agregamos la lnea que contiene la in- de programacin por cuenta propia. servidor cada vez que queremos ver al-
formacin del usuario de un modo sen- Los textos o libros generalmente eran gn cambio o probar algo.
cillo: imprimimos en el archivo identi- difciles de conseguir y, en la mayora Tampoco nos olvidemos de que, por
ficado con el nombre USUARIOS la l- de los casos, venan en ingls, lo cual sobre todas las cosas, es una alternati-
nea que contiene los datos que ingre- los limitaba solamente a un grupo va muy econmica 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 Dnde alojar Perl

arbitrariamente. Este signo podra ha-


ber sido cualquiera, lo importante es stos son slo algunos de los sitios que ofrecen soporte para alojar
usar uno que sepamos que nunca ser pginas desarrolladas en Perl.
ingresado en el formulario. En otra oca- Rec-Inf, recursos informticos www.rec-inf.com.ar
sin veremos cmo 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
lnea. El cero inicial es el contador lis-

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

También podría gustarte