Next Previous Contents

5. ¿Cómo se programa con Perl embebido?

El primer ejemplo que aquí se muestra, servirá para introducir la sintaxis básica del lenguaje y al mismo tiempo para comprobar que nuestro sistema está funcionando y procesa nuestros ficheros .epl. Pero antes necesitamos tener el esqueleto de un archivo escrito en HTML corriente en el que podamos empotrar nuestro código Perl.

<HTML>
<HEAD>
<TITLE>Pruebas de Embperl</TITLE>
</HEAD>
<BODY>
<H1>Este es nuestro fichero de pruebas</H1>

En este fichero todavía no hay nada que tenga que ver con Perl embebido.

</BODY>
</HTML>

El lector que todavía no tenga claro si su servidor web está funcionando puede comprobarlo copiando este código en un fichero y poniendo en las localizaciones típicas (pruebe a ponerlo en /var/www/ aunque debería mirar la variable DocumentRoot en su configuración de Apache).

Ahora comenzaremos a añadir capacidad de proceso a este archivo. En primer lugar parece bastante lógico que cuando insertemos nuestro Perl en el html tendremos que separarlo de alguna manera, para que el intérprete reconozca lo que tiene que procesar y lo que no (el resto del html). Esto en Perl embebido se hace con corchetes. Una sentencia típica podría tener el siguiente aspecto.

        [- $variable1 = "Hola"; -]

El grupo de caracteres "[-" y "-]" delimitan bloques de código perl dentro del HTML. Cualquier cosa que esté incluida entre estos símbolos será interpretada como código Perl. Tan sólo hay que preocuparse de terminar las sentencias con ";" tal y cómo haríamos en un archivo de Perl corriente. Lo que hemos hecho en la línea anterior es una simple asignación, la variable "$variable1" contendrá ahora la cadena de texto "Hola". Al programador Perl que vea esto lo más probable es que se le ocurra introducir sentencias con la instrucción "print" dentro de los delimitadores que acabamos de aprender. Sin embargo, Perl no sabría dónde tiene que imprimir el resultado de la variable. El siguiente trozo de código es incorrecto sólo por la declaración en la que aparece la instrucción print:

        [- 
           $variable1 = "Hola";
           $suma = 1 + 2;
           if ($suma > 0) {
             $texto = "Mayor que cero";
             print $texto; # Esta es la línea incorrecta
           } 
           $variable2 = $variable1
         -] 

Pero entonces ¿cómo imprimimos el resultado de nuestros cálculos (o de nuestras operaciones interactivas) en la página web? Muy fácil, usaremos otros delimitadores: "[+" y "+]". El siguiente listado muestra un ejemplo muy sencillo de cómo podemos imprimir el resultado de una variable asignada previamente en nuestro código, ya incluido dentro de nuestra página de prueba:

        
  <HTML>
   <HEAD>
    <TITLE>Pruebas de Embperl</TITLE>
   </HEAD>
   <BODY>
    <H1>Este es nuestro fichero de pruebas</H1>

     [- $variable1 = "hola";
        $variable2 = ", ¿qué tal?" -]

     [+ $variable1 +]

   </BODY>
  </HTML>

Con este ejemplo, ya podemos comprobar que Embperl está procesando nuestro fichero. Si nombramos al archivo que contiene el código anterior "prueba.epl", lo situamos en el mismo lugar donde ya tengamos páginas funcionando e intentamos acceder a él desde el exterior, deberíamos ver algo como la figura nº 1.

****** IMAGEN 1 ****************************

En este punto hay que aclarar algunas cuestiones que se pueden plantear habiendo visto los ejemplos anteriores. En primer lugar, como ya aparece implícito en los ejemplos anteriores, dentro de los delimitadores "[-" y "-]" podemos escribir código en varias líneas, e incluso poner comentarios. El último ";" que pongamos dentro de este código es opcional, ya que Embperl lo cierra por nosotros en caso de que no nos demos cuenta.

Podemos incluir cuantos grupos de código queramos, y todos comparten el mismo espacio de variables dentro de una misma página y una misma llamada. Esto quiere decir por un lado que podemos dotar a las variables de un valor en un grupo de código y luego usar esa variable (que ya contiene el valor que le hemos asignado previamente) en otro grupo, y por otra parte que si un usuario desde Internet decide hacer una recarga de nuestra página, los valores de las variables no se conservarán.

Dentro de los delimitadores de impresión en la página ([+ +]) podemos poner cualquier cosa que pudiera ser argumento de la función print. Por ejemplo, si queremos que la página descrita unos párrafos más arriba sea un poco más educada, podemos sustituir la línea "[+ $variable1 +]" por esta otra "[+ "$variable1.$variable2" +]"

Cuando decimos que podemos incluir código dentro de nuestra página, también quiere decir que puede haber bucles, condiciones y cualquiera de las posibilidades de control de flujo de un programa que perl nos brinda (que no son pocas). Pero el verdadero poder que nos brinda Perl en una página web es la posibilidad de iterar y condicionar no sólo la ejecución de una parte programada, sino también las etiquetas HTML y sus contenidos. Para explicar mejor esto, ponemos un ejemplo:

Necesitamos que nuestra página enseñe una imagen si el resultado de un cálculo anterior es mayor que 5, y en caso contrario, que muestre un texto de cabecera de primer nivel (<H1>). Para hacer esto utilizaremos lo que se denomina en Embperl Meta-comandos; aunque el nombre asusta un poco, tan sólo se trata de separar las sentencias Perl de bifurcación e iteración en bloques separados. Por ejemplo [$ if (condición) $] que hay que terminar con [$ endif $]. A continuación listamos el código que implementa el problema enunciado al principio del párrafo.

  <HTML>
    <HEAD>
      <TITLE>Pruebas de Embperl</TITLE>
    </HEAD>
    <BODY>
      <H1>Este es nuestro fichero de pruebas</H1>
       [- 
         $variable=7;   #aquí podría haber algo más complicado.
       -]
       [$ if ($condicion>5) $]
         <IMG SRC=imagen.gif>
       [$ else $]
         <H1>La variable es menor o igual a 5, mis disculpas.</H1>
       [$ endif $]
   </BODY>
  </HTML>

Desde el punto de vista de la programación Perl choca un poco el hecho de que haya que cerrar cada una de las sentencias, pero con un poco de detenimiento podrá el lector observar que si no se le indicara al intérprete la finalización del bucle o la condición éste no podría determinar sobre que trozo de código iterar o decidir. Además del meta-comando que acabamos de utilizar existe uno para cada sentencia de control de flujo de Perl. A continuación listamos unos cuantos con sus sentencias de cierre como referencia.

        [$ if (condicion) $]            
        [$ elseif (condicion) $]                
            ...                        
        [$ else $]      
        [$ endif $]     
        
        [$ do $]
        [$ until $]

        [$ while (condicion) $]
        [$ endwhile $]         

        [$ foreach $var (lista) $]
        [$ endforeach $]

Pero el ejemplo descrito anteriormente no resulta de mucha utilidad, en primer lugar porque siempre producirá la misma salida. Nuestra próxima tarea será interactuar con el usuario.

La manera más directa y usual para interactuar con el usuario a través de una página web es un formulario. Embperl nos permite acceder fácilmente a la información proveniente de los formularios que se ha enviado a nuestra pagina-Embperl_script. Para eso existe una estructura de tipo "hash" (tambien llamada array asociativo) con la cual podemos acceder directamente a estos datos. Este "hash" se llama %fdat contiene la información enviada de la siguiente forma:

        %fdat = (
                  nombre_del_campo  => información_del_campo,
                  nombre_otro_campo => información_del_otro_campo
                )

Para verlo más claro supongamos que una página web que hemos hecho de antemano (que no tiene porqué tener nada que ver con Embperl) contiene las siguientes líneas:

        <FORM METHOD="POST" ACTION="prueba.epl">
        Ponga su comentario:<INPUT TYPE="text" NAME="comentario"><BR>
        Y su nombre:    <INPUT TYPE="text" NAME="nombre"><BR>
        <INPUT TYPE="submit" NAME="enviar" VALUE="enviar">
        </FORM>

Cuando el usuario de esta página pulsa el botón en el que pone "enviar", el navegador envía una petición http de la página-script "prueba.epl" (la que ahora nos ocupa) incluyendo la información del formulario que hemos descrito un poco antes. Para saber si el usuario que lo ha mandado ha tecleado en el campo de nombre la información "pepe", y obrar en consecuencia, podríamos incluir en nuestra página el siguiente código:

        [$ if ($fdat{nombre} eq "Pepe") $]
        [+ "¡Qué alegría Pepe, cuanto tiempo sin saber nada de tí!" +]
        [$ else $]
        Lo siento, [+ $fdat{nombre} +], pero no nos han presentado.<br>
        [$ endif $]

Ahora tenemos una visión más amplia de lo que puede hacer Embperl por la interactividad de nuestras páginas. Pero todavía no hemos abierto la caja de Pandora, o mejor dicho CPAN, el archivo de módulos Perl.


Next Previous Contents