Procesar Formas

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.

Recepción de Datos

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)

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.

Reduciendo el Trabajo en Formas

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 ).

Porque no se utilizo el Modulo CGI.pm ?