Cuando el World Wide Web inició su funcionamiento como lo conocemos, empezando a tomar popularidad aproximadamente en 1993, solo se podía apreciar texto, imágenes y enlaces. La introducción de Plugins en los navegadores permitió mayor interactividad entre el usuario y el cliente, aunque estaba limitado por la velocidad y la necesidad de tener que bajar e instalar cada plugin que se necesitara, por lo que estos se desarrollaron mayormente en áreas de vídeo, audio y realidad virtual.

El CGI (Por sus siglas en inglés
"Common Gateway Interface") cambio la forma de manipular información en el web.
En sí, es un método para la transmisión de información hacia un compilador instalado en el servidor. Su función principal es la de añadir una mayor interacción a los documentos web que por medio del HTML se presentan de forma estática.

El CGI es utilizado comúnmente para contadores, bases de datos,
motores de búsqueda, formulários, generadores de email automático, foros de discusión, chats, comercio electrónico, rotadores y mapas de imágenes, juegos en línea y otros.

Esta tecnología tiene la ventaja de correr en el servidor cuando el usuario lo solicita por lo que es dependiente del servidor y no de la computadora del usuario.

De acuerdo a la traducción de la
NCSA: "Un documento HTML es estático, lo que significa que existe en un estado constante; es un archivo de texto que no cambia. Un script CGI por otro lado, es ejecutado en tiempo real, lo que permite que regrese información dinámica. Por ejemplo, digamos que quieres conectar tus bases de datos de Unix al World Wide Web para permitir que las personas de todo el mundo la manipulen. Básicamente, lo que debes hacer es crear un script CGI que será ejecutado por el servidor para transmitir información al motor de la base de datos, recibir los resultados y mostrarselos al cliente. Este es un ejemplo sencillo que muestra donde el CGI tiene sus origenes".

Los programas que maneja el CGI pueden estar compilados en diferentes lenguajes de programación. El más popular para el desarrollo de contenidos Web es el lenguaje
Perl de distribución gratuita, aunque también podemos mencionar: C, C++ y Java.
El funcionamiento de esta tecnología es muy sencillo. Los scripts residen en el servidor, donde son llamados, ejecutados y regresan información de vuelta al usuario.

Para una mejor aclaración presentamos la siguiente gráfica:



Un ejemplo de un llamado a un script CGI puede ser:
http://www.maestrosdelweb.com/cgi-bin/ejemplo.cgi

Hay que tomar muy en cuenta que existen dos formas de enviar información; siendo estas por medio de GET y POST.
El primero envía la información dentro del URL separando los campos con signos de interrogación
'?' antes de la información, como por ejemplo:
http://www.maestrosdelweb.com/cgi-bin/ejemplo.cgi?nombre=Christian&cargo=Webmaster

Esta forma presenta varias desventajas, ya que no permite manejar grandes cantidades de información y por ser una dirección, los Caches de los navegadores pueden guardar los resultados, lo que dificulta el poder acceder nuevamente a la aplicación, pero simplifica el uso de los scripts con solo utilizar una dirección URL.
La otra forma de enviar la información es por medio de POST, el cual envía la información directamente al servidor, haciendolo invisible en el URL y permitiendo cualquier cantidad de información, como el envío de archivos.
Las diferencias entre GET y POST son primordiales para adaptar una aplicación y hacerla funcionar.

Así, el siguiente paso luego de de manejar el diseño de páginas web es aventurarse a estas tecnologías que darán un nuevo concepto de interacción en un sitio web.

Existe una grán cantidad de código gratuito disponible para iniciar, pero es necesario contar con un servidor adecuado y que soporte esta tecnología, asi como la modificación de permisos dentro de sus directorios. La forma más facil de hacer pruebas es con el compilador
Perl que viene incluido en cualquier plataforma Unix o derivada como es el caso de Linux. En otras plataformas de 32 bits como Windows puede ser instaldo el Perl32.

Capítulo 1: Escribiendo nuestro primer CGI

Capitulos del Tutorial:
Escribiendo nuestro primer CGI
Definición y uso de variables

Bienvenidos al tutorial de CGI en español..
En este tutorial se cubrirán varios aspectos que te ayudaran a empezar a programar aplicaciones CGI para el interprete Perl.
Si necesitas mayor información sobre CGI y Perl puedes ver el
artículo introductorio a CGI en este sitio y que además comprende algunos enlaces interesantes.

Bueno, por donde empezamos?
Claro, para iniciar, este tutorial esta pretendido para programar CGIs que funcionen por medio del interprete Perl en un sistema UNIX. En caso de que no cuenten con un sistema Unix, también pueden conseguir una copia de Perl32 en
www.perl.com que funcionará en Windows NT.

El CGI, al igual que el HTML que necesita cierta estructura para funcionar como por ejemplo, las tags <HTML> y <HEAD> debe iniciar siempre en la primera línea con una declaración donde se le indique la locación del intérprete Perl:

1. #!/usr/bin/perl

Para averiguar la dirección de Perl en el sistema, podemos ir a la línea de comando y escribir el comando:

which perl

luego de haber definido esta línea, ya podemos iniciar a escribir código para la aplicación.
En esta lección aprenderemos a escribir una página de respuesta en HTML como resultado de una aplicación CGI.
El comando que se utiliza para escribir en CGI es
print y para enviar al navegador una página HTML, se debe iniciar así:

2. print "Content-type:text/html\n\n";

Esta línea de código envía al navegador la instrucción de que el siguiente contenido será escrito en texto HTML y se utiliza \n para dejar espacios verticales. El contenido de el comando print, debe ser colocado entre comillas. Siempre al terminar una declaración se utiliza ; para finalizar.
Para continuar y luego de está línea podemos seguir escribiendo líneas de código HTML:

3. print "<HTML>\n";
4. print "<HEAD><TITLE>Mi primer CGI</TITLE></HEAD>\n";
5. print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
6. print "<H1>Este es el resultado de mi primer CGI</H1>\n";
7. print "</BODY>\n";
8. print "</HTML>\n";

Incluir HTML dentro de una aplicación CGI es sencillo. En este ejemplo se puede explicar otra cosa muy importante: Al utilizar el comando print se deben utilizar comillas, pero también como parte del HTML se escriben comillas, como se muestra en la línea 5. Para que esto no sea problema, es necesario incluir una diagonal invertida \ antes de cualquier comilla que incluya el HTML para evitar errores de sintaxis.
Existe también otra forma de escribir CGI sin escribir distintas instrucciones y que entre otros, permite que utilicemos CGI sin necesidad de modificarlo con diagonales invertidas:

3. print qq|
4. <HTML>
5. <HEAD><TITLE>Mi primer CGI</TITLE></HEAD>
6. <BODY BGCOLOR="#FFFFFF" TEXT="#000000">
7. <H1>Este es el resultado de mi primer CGI</H1>
8. </BODY>
9. </HTML>
10. |;

Como se puede observar, es más fácil de utilizar esta forma, pero hay que ser muy cuidadosos, pues se pueden causar errores de sintaxis. Por ejemplo, en la línea 10, está la instrucción que cierra la línea de impresión. Esta instrucción debe estar tabulada igual que el resto del código que aparece desde la línea 3 y no debe existir espacios antes de ella o se producirá un error.
En resumen, el código completo para esta aplicación es el siguiente:

1. #!/usr/bin/perl
2. print "Content-type:text/html\n\n";
3. print "<HTML>\n";
4. print "<HEAD><TITLE>Mi primer CGI</TITLE></HEAD>\n";
5. print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
6. print "<H1>Este es el resultado de mi primer CGI</H1>\n";
7. print "</BODY>\n";
8. print "</HTML>\n";

Y bueno, con este código ya es posible imprimir desde una aplicación CGI hacia HTML en nuestro navegador. El código completo en forma de texto se encuentra en el archivo ejemplo1.txt.

Si hay algún error al probarlo, hay una
guía para Solventar errores en aplicaciones CGI que te será de utilidad.

Cualquier comentario respecto al tutorial les será agradecido para mejorar los próximos capitulos.

Ya aprendimos anteriormente a imprimir una página web desde un documento. A continuación veremos la aplicación y definición de las variables en nuestros programas CGI.
Para iniciar diremos que una variable es un espacio donde puede almacenarse información para utilizara durante la ejecución de nuestro programa.
A diferencia de muchos lenguajes de programación, Perl es algo desordenado. Para utilizar una variable basta con definirla en cualquier parte de nuestro programa y no hay necesidad de declarar si es numérica, alfanumérica, etc.
Se pueden utilizar 3 tipos de variables que son:
scalars (escalares), arrays (conjuntos) y hashes (conjuntos definidos).

Las variables
scalars (escalares) almacenan información de un solo valor. Para definirlas utilizamos el signo de dólar ($) antes del nombre de la variable que puede ser $variable1, $mw, $1, etc..
Estas variables se utilizan de la siguiente forma:

$variable1 = "Hola amigo";
$mw = 1999;

Para definir el valor que contine una variable se utilizan las comillas (" "), incluyendo entre comillas los contenidos alfanuméricos y los de valor numérico sin comillas. El valor de una variable puede cambiar según lo requiera el programa y podemos hacer que una variable numérica se convierta en una alfanumérica sin problema.

$ejemplo = 1999;
$ejemplo = "Sabías que estamos en el año $ejemplo";

Para explicar mejor el funcionamiento de un las variables escalares tenemos el siguiente ejemplo

1. #!/usr/bin/perl
2. $Titulo = "Mi primer ejemplo de variables";
3. $Numero = 78;
4. print "Content-type:text/html\n\n";
5. print "<HTML>\n";
6. print "<HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
7. print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
8. print "<H1>$Titulo</H1>\n";
9. print "<H2>Mi número de la suerte es el $Numero</H2>\n";
10. print "</BODY></HTML>\n";

Como pudimos apreciar, al correr este programa, las variables que definimos al principio son incrustadas en el código que se imprime. Además, las variables pueden ser utilizadas todas las veces que lo necesitemos..
El código del programa anterior puede ser tomado del archivo
ejemplo2a.txt para un mejor manejo.

Continuando con el segundo tipo de variables, nos encontramos con las
arrays (conjuntos) que como lo indica su nombre, sirven para almacenar un conjunto de valores, a diferencia de las scalars que almacenan un solo valor. Para definir este tipo de variables se utiliza el signo de arroba (@) antes del nombre de la variable y se utilizan de la siguiente manera:

@dias = ("lunes","martes","miercoles","jueves","viernes","sabado","domingo");

Una vez definida la variable de tipo de tipo array, para utilizar los valores se utilizan variables de tipo scalar, ya que serán manejados individualmente. Asi, para seleccionar el segundo valor de @dias utilizamos el comando $dias[1]. Hay que tomar en cuanta que la númeración inicia desde 0, por lo que para utilizar el primer valor utilizariamos $dias[0]. A continuación ejemplificaremos el uso de estas variables:

1. #!/usr/bin/perl
2. $Titulo = "Mi segundo ejemplo de variables";
3. @habiles = ("lunes","martes","miercoles","jueves","viernes");
4. print "Content-type:text/html\n\n";
5. print "<HTML><HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
6. print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
7. print "<H3>Mis días habiles son:</H3>\n";
8. print "<H4>$habiles[0],</H4>\n";
9. print "<H4>$habiles[1],</H4>\n";
10. print "<H4>$habiles[2],</H4>\n";
11. print "<H4>$habiles[3],</H4>\n";
12. print "<H4>$habiles[4],</H4>\n";
13. print "</BODY></HTML>\n";

y mejor aún, podemos simplificar este proceso con el comando foreach que por medio de un ciclo, nos facilita el trabajo, quedando el código así:

1. #!/usr/bin/perl
2. $Titulo = "Mi segundo ejemplo de variables";
3. @habiles = ("lunes","martes","miercoles","jueves","viernes");
4. print "Content-type:text/html\n\n";
5. print "<HTML><HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
6. print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
7. print "<H3>Mis días habiles son:</H3>\n";
8. foreach $variable (@habiles) {
9. print "<H4>$variable,</H4>\n";
10. }
11. print "</BODY></HTML>\n";

Como apreciamos, el comando foreach repite el proceso que se le indica entre las { }, lo cual es muy efectivo al manejar procesos que tienen una secuencia.
El código del programa anterior puede ser tomado del archivo
ejemplo2b.txt para un mejor manejo.
Como las arrays son conjuntos de elementos, Perl tiene algunos comandos que nos permite manipular los valores que estos tienen:

@meses = ("enero","febrero","marzo");

sort(@meses);
Ordena los valores alfabéticamente
reverse(@meses); Invierte los valores
$ultimo = pop(@meses); Muestra el último valor (marzo)
$primero = shift(@meses); Muestra el primer valor (enero)
push(@meses,"abril"); Incluye el valor (abril) al final de el array @meses
$#meses Muestra el tamaño del array @meses

Finalizando con los tipos de variables, nos toca hablar de las del tipo hashes (conjuntos definidos) y que son como las arrays pues funcionan como conjuntos pero con valores relacionados. Así, podemos decir que los hashes se componen de una definición y su información. Para definirlas se utiliza el signo de porcentaje (%) y se utilizan de las siguiente forma:

%emails = ( "carlos" => "carlos\@maestrosdelweb.com",
"pedro" => "pedro\@maestrosdelweb.com",
"mario" => "mario\@maestrosdelweb.com",
"tomas" => "tomas\@maestrosdelweb.com");

Como observamos, a cada nombre se le asigna un valor que representa su email. Así es como funcionan los hashes, definiendo un valor para cada definición.
Otra cosa que aprendemos en este ejemplo es que antes de escribir el signo de arroba
(@) cuando es parte de un valor, debe de tener anteriormente la diagonal invertida (\) para que el programa no lo confunda con una array.

Ahora, para tomar el valor de cada uno de las definiciones que hay en las
hashes, se utiliza un sistema muy similar al que utilizamos anteriormente con los arrays. Por ejemplo, para tomar el valor del email de mario, utilizaríamos $emails{'mario'} Para ejemplificar el uso que podemos darles a los hashes se presenta el siguiente ejemplo:

1. #!/usr/bin/perl
2. $Titulo = "Mi tercer ejemplo de variables";
3. %emails = ( "carlos" => "carlos\@maestrosdelweb.com",
4. "pedro" => "pedro\@maestrosdelweb.com",
5. "mario" => "mario\@maestrosdelweb.com",
6. "tomas" => "tomas\@maestrosdelweb.com");
7. print "Content-type:text/html\n\n";
8. print "<HTML><HEAD><TITLE>$Titulo</TITLE></HEAD>\n";
9. print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n";
10. print "<H3>Los emails de mis amigos:</H3>\n";
11. foreach $nombre (keys %emails) {
12. print "<H4><A HREF=\"mailto:$emails{$nombre}\">$nombre</A></H4>\n";
13. }
14. print "</BODY></HTML>\n";

Las hashes entonces le adhieren más funciones a la variables. Podemos diseñar con esto en mente un directorio de emails o de enlaces, fácilmente administrable y que podemos cambiar sin mucho esfuerzo.
El código del programa anterior puede ser tomado del archivo
ejemplo2c.txt para un mejor manejo.

Recuerden que si alguno de sus programas CGI les causa algún error, pueden consultar la
guía para Solventar errores en aplicaciones CGI de este sitio.

Con esto finalizamos la explicación de los tipos de variables que podemos manejar en Perl.
Para el próximo capítulo de este tutorial veremos una pequeña reseña de manejo de formas y envió de email desde un programa CGI.
Cualquier comentario respecto al tutorial les será agradecido para poder mejorar en los próximos capítulos.

Para mayor información ir a este link.

http://www.maestrosdelweb.org/editorial/tecnologias/cgi.asp

Para extender la información introductoria, pueden visitar el tutorial de CGI enfocado en el compilador Perl que se está desarrollando en el sitio.

También en los
enlaces temáticos de este sitio hay una sección especializada cubriendo el tema del CGI con los sitios más interesantes, tutoriales y referencia que merece revisar.

Christian Van Der Henst S.
[email protected]