Cuando se envía una
forma en HTML
al servidor, la información es enviada a un programa que procesa los datos, este programa que es invocado en el servidor es definido en el
parámetro action
del TAG FORM
( este programa es denominado
aplicación de servidor
) . En tiempos recientes esta aplicación de servidor puede tomar una gran variedad de variaciones como : JSP (Java Server Pages), ASP (Active Server Pages), ADP (Aol Dynamic Pages), Servlets; guardar los datos en una
base de datos
, enviar los datos a otro servidor...etc.
Una de las primeras metodologías empleadas para realizar esta tarea fueron programas escritos en Perl para procesar información (también denominada CGI (Common Gateway Interface), a pesar de su antigüedad esta sigue siendo una forma muy común para procesar información de sitios pequeños.
Cuando una aplicación recibe datos de una
forma en HTML
esta se encuentra definida en pares como: variable=valor&variable=valor&variable=valor
, además esta información puede arrivar de diferente manera o "método" POST o GET ; cada tecnología (aplicación de servidor) sea JSP/ASP/ADP/Servlets, procesa, envía y espera información de diferente manera, a continuación se define una función en Perl para manipular estos pares de valores.
sub inspeccionar_datos { local (*FORM_DATA) = @_; local ( $request_method, $query_string, @key_value_pairs, $key_value, $key, $value); $request_method = $ENV{'REQUEST_METHOD'}; if ($request_method eq "GET") { $query_string = $ENV{'QUERY_STRING'}; } elsif ($request_method eq "POST") { read (STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); } else { &return_error (500, "Server Error", " No es posible utilizar ese metodo"); } @key_value_pairs = split (/&/, $query_string); foreach $key_value (@key_value_pairs) { ($key, $value) = split (/=/, $key_value); $value =~ tr/+/ /; $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg; if (defined($FORM_DATA{$key})) { $FORM_DATA{$key} = join ("\0", $FORM_DATA{$key}, $value); } else { $FORM_DATA{$key} = $value; } } } |
Si se pregunta,debe ser así de complejo ? o Porque no utilizar el modulo CGI.pm ? Vea Reduciendo el Trabajo en Formas
Sin entrar en mucho detalle, cuando es llamada esta función:
A continuación un programa en Perl que invoca y manipula variables de una forma:
#!/usr/local/perl
&inspeccionar_datos (*la_forma);
$nombre = $la_forma{'nombre'};
$ciudad = $la_forma{'ciudad'};
...
(la función
|
inspeccionar_datos
, la cual recibirá como valor el hash
llamado la_forma
. nombre
y ciudad
) que toman los valores del hash la_forma
, los valores dentro de { }
definen el nombre de la variable en la forma, (el parámetro name
dentro de los TAGS definidos en la
forma HTML
, los valores de estas variables (el parámetro value
de los TAGS definidos en HTML) son asignados vía el hash
directamente a las variables, en esta caso nombre
y ciudad
.inspeccionar_datos
, también es posible definir la función inspeccionar_datos
en otro archivo y mandarla llamar con el comando require (ej: require "inspeccionar_datos.pl")
.
Una vez definidas estas variables ( nombre
y ciudad
) es posible manipularlas de diferentes maneras: Pueden ser colocadas en un "flat file" (Vea
manipular archivos en Perl
), enviadas a una
base de datos
, enviar un correo electronico...etc.
El ejemplo anterior esta diseñado al nivel más crudo que pueda existir, ya que no utiliza ningún modulo de Perl; existe un modulo llamado CGI.pm que permite acortar la manera en que son manipuladas las variables (no existe la necesidad de definir funciones personales como inspeccionar_datos
).
ADP, JSP, Servlets , ASP
las cuales abundan como
aplicaciones de servidor
en los sitios de Internet hoy en día.