programación en perl

5

Click here to load reader

Upload: jose-bello

Post on 23-Nov-2015

14 views

Category:

Documents


4 download

TRANSCRIPT

  • u s e r s . t e c t i m e s . c o m68

    W E B M A S T E R SE X P E R T O S

    principios de los noventa, unprogramador llamado Larry Wall

    decidi facilitar las cosas para la elabo-racin de tareas comunes bajo el entor-no UNIX. As decidi crear Perl (PracticalExtraction and Report Language, Lengua-je Prctico de Extraccin y Reportes), unlenguaje noble, sencillo y prctico paraquienes se inician, y para aquellos queestaban acostumbrados a programar enC o C++.

    Perl es una excelente herramienta parafacilitar el procesamiento de grandesvolmenes de informacin sin sacrificarrendimiento, debido a que basa su pro-pia sintaxis en la mayora de las herra-mientas de UNIX. Esta caracterstica ha-ce de Perl un lenguaje ideal para la ela-boracin de los CGI en un servidor deInternet.

    Dnde lo puedo utilizar?Concebido para UNIX, es ah donde lo-

    gra su mejor desempeo. Los sistemasDOS no tienen un manejo lo suficiente-mente bueno de los procesos o de la me-moria para lograr el rendimiento ideal dePerl, pero existen emuladores que per-miten correr scripts, lo cual resulta degran utilidad para probar los programasantes de subirlos al servidor.

    Programas fuenteTodas las versiones de Perl son de dis-

    tribucin gratuita, e Internet est des-bordada de fuentes y recursos disponi-bles para bajarlos gratuitamente (verPara saber ms), pero a la hora de bus-car, es una buena idea comenzar conPerl.org (www.perl.org), el sitio oficial dePerl, o con Yahoo! (ar.dir.yahoo.com/Internet_

    A y_computadoras/Lenguajes_de_programacion/Perl/).

    Es importante aclarar que Perl no actani como compilador ni como intrprete.Es ms bien un paso intermedio que deaqu en adelante llamaremos intrpretede Perl. Nuestros programas debern serescritos en ASCII puro, con extensin.pl, luego compilados y ejecutados en elmismo servidor. Para quienes se fanati-cen con este lenguaje, ya existen com-piladores de la versin 5 para crear suspropios .exe.

    Todo un buen programadorRecuerden que los programas deben

    escribirse con suma claridad. Si bienesto parece obvio, y muchos lo sabe-mos, son pocos los que siguen esta re-

    UN CONTADOR CON ESTADSTICAS EN LENGUAJE PERL - PRIMERA PARTE

    Ya hablamos de ASP, aprendimos qu es PHP, pero nuncamencionamos nada acerca de este NOBLE LENGUAJE.Perl permite agregar el buscado DINAMISMO a laspginas web, realizar consultas y operaciones en BASESDE DATOS, y mucho ms. En esta nota daremos losprimeros pasos con nuestro primer programa Perl.

    Martn A. [email protected]

    Programador de Perl, C, diseo web y otras yerbas. Actual-

    mente trabaja en el rea de la electromedicina y radiologa.

    Figura 1. Formulario de ingreso deusuario. Puede tener el aspecto denuestro sitio, lo importante es llamarcorrectamente al cgi.

    Figura 2. Pantalla de salida. Esimportante para confirmar la correctaejecucin del script. Tambin esaconsejable que luzca como nuestrositio.

    Programacin en Perl

    Figura 3. El editor de textos UltraEditcorriendo Perl. Con la lnea perl%p%n%e, en la opcin [Avanced/DOS Command], con ejecutamosnuestros programas.

  • u s e r s . t e c t i m e s . c o m 69

    directorio donde est alojado el binariode Perl: en la mayora de los casos,/usr/bin. Luego, para que corra, debe-mos cambiarle las propiedades, de mo-do que sea ejecutable:>chmod 755 archivo.pl

    Este paso debe realizarse una sola vezpor cada archivo nuevo (en general sehace en la primera ejecucin).

    Finalmente, para correrlo slo bastacon invocar el archivo por su nombre:>archivo.pl

    Analogas con C/C++Teniendo en cuenta un par de detalles,

    para los programadores acostumbradosa trabajar en C, o incluso para los querecibieron nociones bsicas de ese len-guaje, la programacin en Perl les resul-tar cmoda y sencilla.

    Uno de esos detalles es la forma dedeclarar las variables. Para ello se lesantepone un smbolo segn su natu-raleza, por ejemplo, para una variableescalar del tipo entero sera $va-lor, $a, $b, etc. Para un vector,en cambio, se le antepone el smboloarroba, por ejemplo: @datos1[0].La ventaja de esto reside en que nodebemos preocuparnos por su declara-cin, ya que el intrprete se encargade acomodrselo segn su convenien-cia (ver Tabla 1, Clases y tipos devariables).

    Veamos un ejemplo:$dato=6547CNN;

    gla. Al escribir hay que ser cuidadoso;de lo contrario, no se hallarn ni si-quiera los propios errores. Lo ideal escomentar cada funcin, explicandobrevemente qu es lo que hace. En Perlesto se realiza colocando el smbolo #delante del texto; de esta forma, elcompilador omite lo que se escribi ala derecha hasta que encuentra un. As, cuando queramos modi-ficar o mejorar un programa, y lo reto-memos luego de un largo perodo, nosser ms fcil identificar las variables,las funciones y el modo de hacer lascosas. Otra ayuda es la clsica tabula-cin: cada vez que se abre un bloque(for, while, if, etc.), hay que dejar dosespacios adelante. En resumen, esaconsejable realizar una escritura claray de fcil entendimiento, tanto paranosotros como para otras personas.

    Qu necesitamos?Una de las herramientas ms impor-

    tantes es Active Perl 5.22 (www.activesta-te.com/pw32/), que servir para ejecutar yprobar los programas en la PC bajo Win-dows 32. Para los que cuenten con la

    posibilidad de tener Linux, o subir losprogramas al servidor sin mucho gastotelefnico, esto no ser necesario. Elservidor web Apache (tanto paraWindows como para Linux) ya viene conel intrprete de Perl 5 por defecto.

    Para realizar los scripts, que como di-jimos anteriormente son en ASCII, sepuede utilizar WordPad, un editor co-mn, o UltraEdit-32 (www.ultraedit.com),una gran herramienta a la hora de progra-mar varias lneas de cdigo (Figura 3).Este ltimo tiene opciones que resultande gran ayuda a la hora de verificar si loque hicimos est bien.

    Primeros pasosPara correr los ejemplos, con Active

    Perl instalado en la mquina, ejecutamosla siguiente sentencia en una ventana deMS-DOS, detrs del smbolo de sistema:C:\pruebas>perl archivo.pl

    donde perl es el intrprete del lenguaje(perl.exe), y archivo.pl es el script quecreamos.

    En el caso de UNIX hay que indicarle,siempre dentro del mismo archivo, el

    Uno de los lenguajesms nobles y sencillospara la creacin depginas web. Condiversos caminos parala ejecucin de tareas,se ha convertido en unaalternativa simple yeconmica para encararproyectos en la Web.

    Para saber ms FreeCode.com www.freecode.com/cgi-bin/search.pl?query=perl ActiveState.com www.activestate.com Perl.com, mucha info sobre este lenguaje www.perl.com Ms material para quemarse el bocho language.perl.com PerlClinic.com, muy recomendado www.perlclinic.com

  • u s e r s . t e c t i m e s . c o m70

    W E B M A S T E R SE X P E R T O S

    crea la variable escalar dato y le asignael valor o cadena 6547CNN. Ahora, siimprimimos:print $dato;

    obtendremos como resultado:6547CNN. Pero, si en cambio queremossumar dato + 1: print $dato+1;

    el resultado ser el siguiente: 6548,sin que esto modifique el contenidodel escalar dato. Perl toma todos loscaracteres iniciales que formen un n-mero correcto, y ese nmero es el queinterpreta.

    La idea de Perl es simplificar las cosas,pero debemos saber bien cmo es quelo hace para no tener problemas.

    Ms similitudesLas conocidas herramientas for, while

    e if de C tambin funcionan en Perl; al-gunas cambian muy levemente la sinta-xis, pero el concepto es exactamente elmismo.

    Los vectores se manejan de la mismaforma, pero un dato interesante es queen Perl, para contar los elementos con-tenidos por un vector slo hace falta lasiguiente sentencia:@vector = ( 100, 102, 103, 104);#una rpida forma de cargar los da-tos.$cant_elem = @vector;

    #una ms rpida forma decontar cuntos elementos hay.

    El valor de $vector[2] ser 103 y elde $cant_elem es 4.

    Manos a la obraEl proyecto completo que realizare-

    mos ser un contador con estadsticas;algo parecido al que solemos usar enlas pginas web, como el de TheCoun-ter.com o el de Ciberstats.com. El

    nuestro ser un ejemplo rpido, el cualpodr perfeccionarse y completarse conms investigacin.

    La idea es crear una base de datos deusuarios, quienes emplearn el conta-dor. Cada uno tendr una cuenta, que seir incrementando segn la cantidad devisitas que reciban. Este contador au-mentar el nmero de visitas slo conla carga completa de una imagen. Estaopcin la podemos usar con nuestraspginas web, con amigos o con abona-dos, mejora de por medio, si tenemosun servidor de Internet.

    El proyecto completo consta de tresmdulos. El primero crea la base de da-tos y agrega nuevos usuarios (Figuras 1y 2). El segundo es el contador propia-mente dicho, el cual almacena las visi-tas y una estadstica sencilla del nave-gador que estaba usando el internautaque entr en la pgina. El tercero y l-timo es el que presenta el informe detoda la data recolectada.

    Veamos el primer ejemplo, mientrasavanzamos en la explicacin. Lo pri-mero que haremos es pasarle la infor-macin a nuestro script de Perl me-diante un formulario (formula-rio.html) con el mtodo GET. Esto nospermitir ver en la barra de navegacincmo es enviada. Encontrarn todo elcdigo completo en la carpeta WEB-MASTERS del CD:

    Tabla 1. Clases y tipos de variablesEn esta tabla podemos ver cmo definir las variables para los distintos tipos de datos.

    Clase Smbolo TiposEscalar $ Entero, Real, Cadena, PunteroVector @ Vector de escalaresHash % Vector asociativo de escalaresArchivo (ninguno) Identificador de archivo

    Lugares que corren PerlPara muestra basta un botn, as que no dejen de visitar alguno de lossitios que basan su funcionamiento en Perl.

    Terra, el famoso portal, utiliza este lenguaje www.terra.com.arVideoMovil, el primer sitio de alquileres online www.videomovil.com.arOtro sitio que funciona gracias a este lenguaje use.perl.org

    El cdigoSin excepcin, en la primera lnea de-

    bemos informar dnde est ubicado elbinario del intrprete de Perl. Esto sedebe hacer siempre a continuacin delos smbolos #!, los cuales no son reco-nocidos por Perl y s por UNIX. En lamayora de los servidores el camino es/usr/bin, de lo contrario debern con-sultar al administrador.

    La siguiente lnea es la ubicacin,tambin en el servidor, pero esta vez dealgo conocido: nuestra base de datos.Este archivo ser un ASCII almacenadoen la carpeta que indiquemos. Porejemplo: el directorio /datos dentro de/public en el directorio raz del espacioen el servidor. Este archivo an no exis-te, y ser creado la primera vez queagreguemos un usuario.

    Luego invocamos una a una las distin-tas subrutinas, las que sern declaradasa continuacin del programa principal(dentro del mismo archivo .pl). El sm-bolo & delante de cada subrutina es elequivalente al $ para los escalares y @para los vectores. Esto le indica a Perlque debe ejecutar esa subrutina, la cualdebe ser declarada ms adelante. Fjen-se que en la declaracin no lleva el sm-bolo &, sino que se le antepone la pa-labra sub.

    La primera de estas subrutinas es&parseform; tan complicada de explicarcomo necesaria. Por ahora recomiendoque la copien tal cual est cada vez quela necesiten. La forma como lo hace ex-cede a nuestro primer acercamiento deesta nota y dejaremos esta explicacinpara ms adelante; pero lo que hace essencillo. Es una de las piezas fundamen-tales: la rutina encargada de analizar elformulario HTML que llama a nuestrocgi, y de adaptar los datos ingresados(tanto en modo GET como en POST) pa-

  • LISTADO 1 - Agregar. pl#!/usr/bin/perl

    $BaseDatos = /server/www/www.midominio.com.ar/public-/datos/usuarios.txt;

    # COMIENZO DEL PROGRAMA# de la siguiente forma invoco las diferentes subruti-nas o funciones.&parseform; #analiza el formulario&ObtenerInfo; #recupera la informacin anterior&Agregar; #agrega el usuario a la base de datos&Salida; #Muestra una pantalla de salida

    # FIN DEL PROGRAMA

    # Obtengo la informacin del pedidosub ObtenerInfo{$nombre = $FORM{nombre};$email = $FORM{email};$tipo = $FORM{tipo};

    }

    #Agrego el nuevo usuariosub Agregar{

    open(USUARIOS, >>$BaseDatos) || open(USUARIOS,>$BaseDatos);print USUARIOS 0|$nombre|$email|$tipo\n;close (USUARIOS);

    }

    sub Salida{print Content-type: text/html\n\n;print }

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

  • u s e r s . t e c t i m e s . c o m72

    W E B M A S T E R SE X P E R T O S

    ra que sea comprendido por nuestroprograma. En pocas palabras: almacenalos valores ingresados separados por losnombres que se les asignaron en loscampos de los formularios. En nuestrocaso son $FORM{nombre}, para ex-traer el dato ingresado en el campo lla-mado nombre; $FORM{email}, para elcampo email, y as los dems.

    Una vez analizado el formulario, esta-mos en condiciones de tomar esa infor-macin asignndola a variables escala-res comunes. Esto lo hacemos en la se-gunda rutina llamada &ObtenerInfo;,que nada ms asigna los campos ante-riormente analizados en las nuevas va-riables escalares.

    La tercera rutina es &agregar, encar-gada de adicionar todos los datos obte-nidos al final de la base de datos deusuarios del sistema.

    Lo que vemos son dos Opens separa-dos por el operador || (doble pipe),que se encarga de decirle al intrpretede Perl que si falla la primera funcin,es decir, si da algn error, ejecute la se-gunda. Entonces intenta abrir el archi-vo en modo agregar al final (operador>> delante del nombre del archivo). Siel archivo no existe, crea uno nuevo,vaco, listo para ingresar informacin(operador >).

    El nombre del archivo fue dado al co-mienzo e ingresado en la variable $Ba-seDatos. Tambin, dentro de la fun-cin open, le asignamos una etiquetaque identifique a este archivo abierto,para poder manejarlo y direccionarle lainformacin. Inmediatamente despusagregamos la lnea que contiene la in-formacin del usuario de un modo sen-cillo: imprimimos en el archivo identi-ficado con el nombre USUARIOS la l-nea que contiene los datos que ingre-samos en el formulario.

    La base de datos ser un archivo AS-CII que contendr los distintos camposseparados por el signo | (pipe); elegidoarbitrariamente. Este signo podra ha-ber sido cualquiera, lo importante esusar uno que sepamos que nunca seringresado en el formulario. En otra oca-sin veremos cmo identificarlo. Es im-portante que no tenga retornos de ca-rro ( o \n) en medio de cadalnea. El cero inicial es el contador lis-

    to para usar y, a continuacin, le siguenlos dems campos. Un ejemplo de basede datos sera el siguiente:0|Martn|[email protected]|10|Pikachu|[email protected]|10|Andrea|[email protected]|2

    El ltimo campo es el que usaremospara saber las preferencias del usuario,si queremos que el contador sea exhibi-do, o no, que simplemente figure unapublicidad o un logo.

    Por ltimo, la presentacin final, uti-lizada para transmitirle al usuario que elprograma se ejecut normalmente.

    Otra de las sentencias clsicas de Perl,obligada si queremos enviar texto a lapantalla del navegador, es print Con-tent-type: text/html\n\n;. Debemosavisarle al browser lo que vamos a en-viarle a continuacin. Inmediatamentedespus, estamos listos para pasarle elcdigo HTML que queremos mostrar, y laforma ms sencilla de hacerlo es conetiquetas.

    Con la sentencia print