Curso de Perl
Perl logo
Contenido
Indice
Capítulo 1
Capítulo 2
Capítulo 3
Capítulo 4
Capítulo 5
Tareas 1
Tareas 2
Tareas 3
Tareas 4
Tareas 5
Elaborado por
Red Antigua Logo
Capítulo 3: Instalación de módulos

Capítulo 1

Tareas 1
Capítulo 2

Tareas 2
Capítulo 3

Tareas 3
Capítulo 4

Tareas 4
Capítulo 5

Tareas 5
Capítulo 3: Instalación de módulos        


CPAN

DBI y DBD::MySQL
CGI

CGI::Application
HTML::Template



Este capítulo cubre módulos de CPAN.
El enfoque está en módulos de programación web.


 

CPAN:

(arriba)
 
  • Que es CPAN?
    Desde perldoc perlfaq2:
    'CPAN stands for Comprehensive Perl Archive Network'.
    Son servidores en internet con todos los módulos que se necesita para Perl.

  • Como se instala un módulo de CPAN?
    • a. Se instala manualmente.
      Desde perldoc perlfaq8:
      • Busca el módulo en CPAN search.
      • Baja en módulo (normalmente empacado con la extension .tar.gz).
      • Desempaca el módulo: gunzip -c Modulo-1.00.tar.gz|tar -xf -
      • cd Modulo-1.00
      • perl Makefile.PL
      • make
      • make test
      • make install
    • b. Se instala usando el módulo CPAN.
      Desde perldoc CPAN:
      • perl -MCPAN -e shell;
      • install Modulo-1.00
    Usando el módulo CPAN requiere una conexión a internet.
    El módulo baja automaticamente desde CPAN, y se el módulo depende de otros módulos, se instalan estos si todavía no están instalados.
    La ventaja usando CPAN es la comodidad y rapidez - instalar un módulo que depende de otros 10 puede ser tardado, tanto de búsqueda del módulo correcto como la propia instalación manual.
    Pero el resultado es igual - si no se cuenta con una conexión internet, hay que instalar módulos manualmente.
  • CPAN docs.
    El sitio www.cpan.org no sólo cuenta con los módulos, sino también la documentación de los mismos.
    En search.cpan.org se busca y encuentra.
  • Tarea: Busca en CPAN, instala un módulo manualmente, luego uno usando el CPAN shell.
 

CGI

(arriba)
 
  • CGI era un módulo de CPAN, pero ya está integrado en la distribuición de Perl por ser tan popular.
    El módulo CGI facilita la programación web.
    Un ejemplo simple, desplegando una página web simple:
    use CGI qw/:standard/;
    print header,
    start_html('A Simple Example'),
    h1('A Simple Example'),
    end_html;
    	  
    Hay más ejemplos en la documentación: perldoc CGI.
  • Tarea: Crea una página HTML simple, coloca el script en el directorio cgi-bin del servidor Apache, chmod 755 script.pl, ver el output en http://miservidor/cgi-bin/script.pl.
 

HTML::Template

(arriba)
 
  • HTML::Template sirve como complemento al módulo CGI, para facilitar la creación de un contenido HTML dinámico más avanzado.
    Otra ventaja es que se separa el formato HTML del código Perl en dos archivos distintos.
    Así se puede modificar el formato HTML sin tocar el código Perl.
    Abajo sigue un ejemplo sencillo, primer hecho sólo con el módulo CGI, luego con CGI/HTML::Template.


    Solo CGI - código Perl y HTML en el mismo archivo
    #!/usr/bin/perl -w
    use CGI qw/:standard/;
    print
      header,
      start_html('Simple Script'),
      h1('Simple Script'),
      start_form,
      "What's your name? ",textfield('name'),p,
      "What's the combination?",
      checkbox_group(-name=>'words',
    		 -values=>['eenie','meenie','minie','moe'],
    		 -defaults=>['eenie','moe']),p,
      "What's your favorite color?",
      popup_menu(-name=>'color',
    	     -values=>['red','green','blue','chartreuse']),p,
      submit,
      end_form,
      hr,"\n";
    
    if (param) {
      print
        "Your name is ",em(param('name')),p,
          "The keywords are: ",em(join(", ",param('words'))),p,
    	"Your favorite color is ",em(param('color')),".\n";
    }
    print end_html;
    

    CGI/HTML::Template - el código
    #!/usr/bin/perl -w
    use CGI qw/:standard/;
    use HTML::Template;
    
    # open the html template
    my $template = HTML::Template->new(filename => 'example.tmpl.html');
    # fill in some parameters
    $template->param(
    		 PARAM    => param || '',
    		 NAME     => param('name') || '',
    		 KEYWORDS => join(", ",param('words')) || '',
    		 COLOR    => param('color') || '',
    		);
    # print the HTTP header, then the output from the parsed template
    print header, $template->output;
    

    CGI/HTML::Template - la plantilla HTML
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
    <HTML>
    <HEAD>
    <TITLE>Simple Script</TITLE>
    </HEAD>
    <BODY>
    <H1>Simple Script</H1>
    <FORM METHOD="POST"  ENCTYPE="application/x-www-form-urlencoded">
    What's your name?
    <INPUT TYPE="text" NAME="name" VALUE="<TMPL_VAR NAME=NAME>"><P>
    What's the combination?
    <INPUT TYPE="checkbox" NAME="words" VALUE="eenie" CHECKED>eenie
    <INPUT TYPE="checkbox" NAME="words" VALUE="meenie">meenie
    <INPUT TYPE="checkbox" NAME="words" VALUE="minie">minie
    <INPUT TYPE="checkbox" NAME="words" VALUE="moe" CHECKED>moe
    <P>What's your favorite color?
    <SELECT NAME="color">
    <OPTION SELECTED VALUE="red">red
    <OPTION  VALUE="green">green
    <OPTION  VALUE="blue">blue
    <OPTION  VALUE="chartreuse">chartreuse
    </SELECT>
    <P>
    <INPUT TYPE="submit" NAME=".submit">
    <INPUT TYPE="hidden" NAME=".cgifields" VALUE="words"></FORM>
    <HR>
    <TMPL_IF NAME="PARAM">
    Your name is <EM><TMPL_VAR NAME=NAME></EM>
    <P>The keywords are: <EM>
    <TMPL_VAR NAME=KEYWORDS></EM>
    <P>Your favorite color is <EM><TMPL_VAR NAME=COLOR></EM>.
    </TMPL_IF>
    </BODY></HTML>
    


  • Tarea: Instalar HTML::Template usando CPAN, estudiar ejemplos en perldoc HTML::Template (especialmente los ejemplos de TMPL_LOOP) y el tutorial de HTML::Template en www.redantigua.com.
 

DBI y DBD::MySQL

(arriba)
 
  • DBI (DataBase Interface) es el front-end de Perl a cualquier base de datos. Siempre se instala junto a un driver de la base de datos, donde el nombre del driver es DBD::XXX, donde DBD significa DataBase Driver, y XXX corresponde al nombre de la base de datos.
    Así hay DBD::MySQL, DBD::Oracle, DBD::PostgreSQL, DBD::ODBC, etc., pero estos módulos no se usan directamente, sino toda la programación se hace hacia DBI.
    Esto facilita la programación, ya que la única linea que revela que base de datos se está usando es la linea de conexión, todo lo demás aplica a cualquier base de datos que soporta SQL.

    Para ver como se conecta a una base de datos MySQL, se encuentra este tipo de info en perldoc DBD::MySQL, por ser información específica de MySQL.
    Para ver como se hace un SQL SELECT, por ejemplo, se consulta y no en perldoc DBI, por ser información genérica de bases de datos.
    No es necesario especificar use DBD::MySQL; en el ódigo Perl, es suficiente con use DBI;.
    Un ejemplo sencillo usando DBI
    #!/usr/bin/perl -w
    
    use strict;
    use DBI;
    # Crear el DBH (DataBase Handle) que maneja la conexión a MySQL	  
    my $dbh = DBI->connect(
        'DBI:mysql:nombre_de_la_base_de_datos:mysql.dominio.com.gt:3306',
        'usuario',
        'password',
        {RaiseError => 1}
        ) 
        or die "No se pudo conectar a MySQL: $DBI::errstr\n";
    # Del DBH se crea un STH (STatement Handle) para manejar SQL Statements
    my $sth = $dbh->prepare("SELECT * FROM una_tabla WHERE un_campo > 50");
    $sth->execute;
    # Obtener linea por linea
    # Cada linea es un arreglo, un elemento por columna.
    while (my @row = $sth->fetchrow_array ) {
        print "@row\n";
    }
    # Terminar la conexión con MySQL	  
    $dbh->disconnect;
    
  • Tarea: Instalar DBI desde CPAN, estudiar ejemplos en perldoc DBI.
 

CGI::Application

(arriba)
 
  • CGI::Application es la forma estructurada de usar CGI en aplicaciones grandes.
    Para scripts sencillos no vale la pena usar CGI::Application, pero al crecer una aplicación, este módulo facilita bastante.
    Se escribe toda la aplicación en forma de un módulo, donde los "métodos" corresponde a un llamado "run mode", que más o menos equivale a una "pantalla".
    El módulo se puede instalar como un módulo cualquiera, no necesita estar en la carpeta cgi-bin.
    El script que se corre es un "wrapper", que crea una instancia del módulo, o sea, la aplicación.

    NOTA: En los ejemplos de perldoc CGI::Application se habla de dos archivos, el "wrapper" y el módulo. Sin embargo, en una aplicación real normalmente es necesario dividir el módulo en varios archivos, especialmente si tiene muchos "run modes"
  • Tarea: Estudiar ejemplos en perldoc CGI::Application y tutoriales de CGI::Application en www.redantigua.com.


Tareas

Last modified: Sat Apr 24 14:17:38 CST 2004