PERL
 

 

Portada Infografia Contenido Resumen

 

¿Qué es Perl?

Perl (Practical Extraction and Report Languaje) es un lenguaje creado a principio de los noventa por Larry Wall, (larry@wall.org) y un aspecto muy interesante es que su distribución es gratuita.

Perl es un lenguaje pensado para la manipulación de cadenas de caracteres, archivos y procesos. Esta manipulación se va simplificada por el importante número de operadores a disposición del usuario. El lenguaje Perl se percibe habitualmente como un lenguaje intermedio entre los shell scripts y la programación en C. En efecto, los programas en Perl son una sucesión de instrucciones y son similares a los shell scripts porque no existe un procedimiento principal como la subrutina main en C. Sin embargo, se parece al lenguaje C en su sintaxis y en el número importante de funciones que permiten la manipulación de cadenas de caracteres y archivos.

El lenguaje Perl no es precompilado, pero aún así es más rápido que la mayoría de lenguajes interpretados, en especial que el Bourne Shell. Esto se debe a que los programas en Perl son analizados, interpretados y compilados por el interprete perl antes de su ejecución.

Estas características hacen que el mantenimiento y la depuración de un programa en Perl sean mucho más sencilla que el mismo programa escrito en C.

Por todo esto, Perl es un lenguaje muy utilizado en los dos campos siguientes:

1. La administración de sistemas operativos. Debido a sus características Perl es muy potente en la creación de pequeños programas que pueden ser usados como filtros para obtener información de ficheros, realizar búsquedas, etc. Además, aunque Perl nació en un entorno Unix, hay versiones para casi todas las plataformas existentes.

2. La creación de formularios en la Web. Es decir, se utilizan para la creación de scripts CGI (Common Gateway Interface). Estos scripts realizan el intercambio de información entre aplicaciones externas y servicios de información, es decir, se encargan de tratar y hacer llegar la información que el cliente WWW manda al servidor a través de un formulario.

Si deseas profundizar un poco más en aspectos básicos de Perl, te recomiendo El evangelio de Perl ,http://epq.com.co/~cjara/perl/tutorial.html


Acerca de las versiones de Perl.

Entre las dos versiones más populares populares de Perl, la 4.3 y la 5.0, que de hecho poseen diferencias importantes entre una versión y otra. Seguramente el lector se pregunta porque surge la duda entre usar una versión vieja y una nueva, por regla general las nuevas versiones son mejores que las anteriores de modo que las opacan en todo sentido, Perl no es la excepción a esta regla, el único factor que impide una transición inmediata es que no son 100% compatibles. La versión 5 de Perl es una reescritura total que ya incluye un manejo de estructuras abstractas de datos mucho mas poderoso, incluso, soporta la orientación a objetos a su manera (lo que rompe en gran medida con la filosofía tradicional de Perl de una programación más parecida a los Shells de Unix que al modular lenguaje C). De modo que las librerías, por ejemplo para creación de CGIs no funcionan de una función a otra por lo que la migración es poco practica.

En el  tutorial descrito en Tutorial de Perl, http://www.cicei.com/gsi/tutorial_perl/indice.htm [3]se  sigue la filosofía tradicional de Perl y no  profundiza en la orientación a objetos.

Filosofía de Perl

"Hay mas de una forma de hacerlo"

-Larry Wall, autor del lenguaje de programación Perl.
 


Perl no establece ninguna filosofía de programación (de hecho, no se puede decir que sea orientado a objetos, modular o estructurado aun cuando soporta directamente todos estos paradigmas), los objetivos que se tuvieron en cuenta al diseñar la sintaxis de Perl fueron la facilidad de aprendizaje y de uso y la claridad de código, las cuales, considero que son necesarias (aunque pueden escribirse programas en Perl complejos e inteligibles si así se desea).

Por si fuese poco, Perl no es ni un compilador ni un interprete, esta en un punto intermedio, cuando mandamos a ejecutar un programa en Perl, se compila el código fuente a un código intermedio en memoria, se le optimiza (como si fuésemos a elaborar un programa ejecutable) pero es ejecutado por un motor, como si se tratase de un interprete. El resultado final, es que utilizamos algo que se comporta como un interprete pero que tiene un rendimiento comparativo al de programas compilados. Sin embargo, ya existen compiladores de Perl con la versión 5.

En fin, Perl no nos forza a nada, pero como es lógico hay ciertas reglas que recomiendo seguir para facilitar nuestro trabajo:

Claridad. En la mecánica de programación actual, los programas deben de ser entendibles por la persona que nos suceda en tareas de mantenimiento, de lo contrario perjudicamos tanto a nuestros compañeros de trabajo como a nuestra propia libertad para progresar y mantenernos libres de preocupaciones.

Indentación. Una costumbre ya clásica de la programación,  indento el código dos espacios hacia adelante al abrir cada bloque, y termino la indentación al terminar el bloque, de modo que las llaves de apertura y cierre quedan a la vista y en la misma columna, solas en sus renglones (esto incrementa algo el numero de líneas, pero facilita sobremanera la búsqueda y corrección de los diversos bloques de control).
 

Nombres de variables y demás. dar la máxima claridad a los nombres de las variables sin hacerlos demasiado grandes, el nombre de los contadores y variables que guardan valores concernientes a un pequeño segmento de código por lo regular son de un par de letras (c1, c2, ... cx para los contadores, s1, s2, etc para cadenas de entrada etc.) mientras que las variables que afectan a diversos segmentos (a modo de regla, que tienen su definición en una pantalla distinta a donde se usan) tienen nombres explicativos que no excedan los 12 caracteres. Además, los nombres de archivos se usan con mayúsculas (ARCHENT, ARCHSAL, etc) y las clases tienen su primera letra mayúscula.


Comentarios.
Para facilitar la comprensión de un programa no hay como explicarlo, y los comentarios son el medio ideal para hacerlo, hay por lo menos tres comentarios que considero que siempre deben incluirse en un programa: Que hace el programa, Quien lo escribió y Cuando inicio y termino de escribirlo, sobretodo en el contexto de una organización, estos tres simples comentarios pueden hacer la diferencia entre desechar un programa como indescifrable o dedicarle algún tiempo para revisarlo. Además, considero prudente comentar dentro del código la forma en que el programa deberá ejecutarse, parámetros, y su sintaxis, así como comentar las estructuras de control como un modo de explicar la funcionalidad al detalle y recalcar con comentarios las funciones que cumplen las variables.


Sencillez. Es cómodo en ocasiones el comprimir una serie de instrucciones en una sola línea, queda al criterio decidir cuando se gana en claridad con un código mas o menos extenso, pero no debe titubearse en comentar el código que sea "comprimido".

 

Cómo enviar emails usando Perl y Sendmail?

Es una tarea habitual el que un programa CGI tenga que informar a un conjunto de usuarios respecto a nuevos datos generados. Por ejemplo, usted puede ser uno de los miles de webmasters que han solicitado el uso de un contador gratuito de páginas web, que le envía periódicamente estadísticas sobre los accesos a sus páginas, a través del correo electrónico. Este tipo de servicios, tienen la responsabilidad de informar a tantos usuarios, que requerirían de al menos una persona, a tiempo completo, dedicada a enviar estos datos a los usuarios. Claramente, esta no es una opción ni si quiera, para una gran empresa.

La forma de automatizar esta tarea es dejarle a Perl hacer el trabajo duro. En este artículo, se crea un script en Perl, que hará exactamente esto. Vamos a ir paso a paso, dando explicaciones y analizando los puntos más complicados.

Perl, por ser como es, ofrece al programador varias posibilidades a la hora de hacer una misma tarea, y con ello, incluimos el envío de mensajes con sendmail. Sendmail es un programa de código abierto que se usa en la mayoría de los sistemas Unix y en unos cuantos NT. Sendmail, como su nombre indica, tiene la función de enviar emails. Vamos a usar la capacidad de Perl de abrir pipes a otros programas para así ejecutar sendmail y pasarle los parámetros necesarios. Si usted no conoce en profundidad sendmail, no importa. Simplemente considere que Sendmail se va a encargar de enviar el contenido del mensaje y las cabeceras correspondientes a sus destinatarios.

Aquí tenemos, por ejemplo, un sencillo programa que avisa al suscriptor de un mailing list, que su petición ha sido aprobada:

 #!/usr/bin/perl
 use CGI;

 my $query    = new CGI;
 my $sendmail = "/usr/sbin/sendmail -t";
 my $reply_to = "Reply-to: foo@bar.org";
 my $subject  = "Subject: Confirmación de su solicitud";
 my $content  = "Gracias por su solicitud.";
 my $to       = $query->param('send_to');
 my $file     = "subscribers.txt";

 unless ($to) {
  print $query->header;
  print "Por favor, escriba su email y vuélvalo a intentar";
 }

 open (FILE, ">>$file") or die "Cannot open $file: $!";
 print $to,"\n";
 close(FILE);

 my $send_to  = "To: ".$query->param('send_to');

 open(SENDMAIL, "|$sendmail") or die "Cannot open $sendmail: $!";
 print SENDMAIL $reply_to;
 print SENDMAIL $subject;
 print SENDMAIL $to;
 print SENDMAIL "Content-type: text/plain\n\n";
 print SENDMAIL $content;
 close(SENDMAIL);

 print $query->header;
 print "La confirmación de su solicitud se le enviará ahora.";
   

A primera vista, puede comprobar que este programa es muy sencillo, y si no fuera tan explícito en los comentarios, aún se podría reducir más. Si profundiza un poco en el código, verá que no es difícil de interpretar, incluso si es usted un iniciado del Perl. Sin embargo, el programa cumple muy bien su función de enviar correo.

Mírelo línea por línea ... El cgi capta los datos del formulario web, el cual se compone de campos de texto:

 <FORM method="POST" action="http://perlfect.com/cgi-perlfect/cgimail.pl">
 <INPUT type="text" name="send_to">
 <INPUT type="submit">
 </FORM>
   

El script usa el módulo CGI.pm para obtener los datos del formulario.  La función param() del módulo CGI.pm, devuelve el valor de un campo del formulario si damos su nombre como argumento. Esto es todo lo que necesita saber por ahora, ya que la usamos simplemente para averiguar que ha tecleado el usuario en el formulario. En caso de que éste no haya escrito nada en el formulario, el script devolverá un mensaje de error, solicitando al usuario que vuelva a rellenar el formulario.

 

Tutoriales

Si el usuario introduce una dirección de email, se agrega al final de un fichero de texto para un uso posterior por otro programa, tras lo que el script devuelve un email de confirmación al usuario.

Un mensaje de email está compuesto por cabeceras y contenido. Hay muchas posibles formatos de cabeceras, pero el más habitual es el siguiente:

 

To:

Una lista separada por comas de las direcciones de destino.

From:

La dirección de email del remitente.

Reply-to:

La dirección de email donde se contestará al mensaje.

Subject:

El título del mensaje.

Content-type:

El tipo MIME del contenido.

Las cabeceras preceden al contenido del mensaje. La cabecera Content-type se define justo antes del contenido y le siguen siempre dos caracteres de cambio de línea.

Sendmail ofrece la posibilidad, como la mayoría de los programas unix, de leer a partir del standard input, por lo que lo único que necesitamos hacer es abrirle un pipe y alimentarlo con los datos que queremos que procese. Apreciarán que hemos pasado el parámetro -t a sendmail. Éste simplemente le indica a sendmail que busque en los datos las cabeceras To:, Cc: o Bcc: y obtenga los destinatarios de ahí. Una vez abierto correctamente el pipe, volcamos el mensaje. Primero, las cabeceras, cada una seguida de un caracter cambio de línea, luego un cambio de línea adicional y, por fin, el contenido del mensaje. Después cerramos el pipe. Así, el mensaje de email se abrá enviado correctamente!

Estos son algunos casos prácticos donde usar sendmail y perl:

 

  1. Informar a las visitas de su web (sólo a las que lo soliciten) sobre novedades o actualizaciones. El script del ejemplo es una buena forma de obtener las direcciones de email de aquellos a los que queremos escribir.

  2. Informarse a sí mismo sobre el funcionamiento de los scripts que ejecuta. Por ejemplo, usted puede escribir unas pocas líneas de código para que le envíen un email cuando algo va mal en uno de sus scripts.

  3. Montar un mailing list.

 

Recomendaciones.

Si deseas un curso de Perl, muy amigable te recomiendo el Curso de Perl

Si tienes preguntas en cuanto a Perp y PHP visita PERP Vs PHP