Bueno pues quizá en estos momentos de auge de PHP, ASP y otros muchos lenguajes dinámicos para web, ya no sea tan necesario usar Perl, pero como sea a alguien le puede servir esta función que híce basándome en otra que encontré por ahí por Internet en un tiempo donde tuve que programar en perl para una empresa de páginas web jeje...

Aquí les dejo el codigo... no es la gran cosa:

Lo que hace es recibir el parámetro enviado al mandar llamar la función (puede ser (post->("p" ó "P") get-> ("g" ó "G")) despues dependiendo de por cual método está enviando las variables, es la forma en que las recibe. Sí las variables fueron enviadas por Post, la función saca las variables de una variable de entorno. Si las variables fueron enviadas por Get, entonces las variables son obtenidas de la variable de entorno "QUERY_STRING" la cual las contiene en un formato parecido a: "variable1=valor1&variable2=valor2&variable3=valor3" (en este formato también se encuentran las variables recibidas por post)... Por lo tanto, esta cadena es separada por el caracter "&" despues por el caracter "=" y asignada a un array que retorna la función.

La función es esta:

postget.pl

PERL:
  1. sub postget{
  2.     #inicializamos variables
  3.     my (%datos1, $buffer, @pairs, $pair, $name, $value, $metodo);
  4.     $metodo=$_[0];                                          #recivimos el parametro enviado a la funcion ("p" ó "P" ó "g" ó "G")
  5.    
  6.     #Leemos los datos enviados dependiendo del metodo usado
  7.     if (($metodo eq "p") or ($metodo eq "P"))               #si quiere recibir datos por el metodo post
  8.        {
  9.         read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});   #leemos variables Post del navegador
  10.        }
  11.     else
  12.        {
  13.         if (($metodo eq "g") or ($metodo eq "G"))       #si quiere recibir datos por el metodo get
  14.            {
  15.             $buffer = $ENV{'QUERY_STRING'};             #leemos variables Get de la URL
  16.            }
  17.         else
  18.            {
  19.             return 0;
  20.            }
  21.         }
  22.    
  23.     #Dividimos cada variable
  24.     @pairs = split(/&/, $buffer);
  25.  
  26.     foreach $pair (@pairs) {
  27.         #Separamos la variable de su valor
  28.         ($name, $value) = split(/=/, $pair);
  29.  
  30.         #Decodificamos
  31.         $name =~ tr/+/ /;
  32.         $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  33.         $value =~ tr/+/ /;
  34.         $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  35.  
  36.         #Asignamos una nueva llave al valor
  37.         $datos1{$name} = $value;
  38.     }
  39.  
  40.     #regresamos datos
  41.     return %datos1;
  42. }
  43. 1;

Y la manera de usarse sería así:

PERL:
  1. #!/usr/bin/perl
  2. use strict;
  3. use CGI::Carp qw(fatalsToBrowser);
  4. print"content-type:text/html\n\n";
  5. require 'postget.pl';
  6.  
  7. my %datos;                                #array que recibirá las variables enviadas por Post o por Get
  8. %datos= &postget("p");                #en este caso, las variables fueron enviadas por post así que nosotros le decimos a la función que las variables están siendo enviadas por éste metodo, enviandole el parametro "p"
  9. my $name= $datos{"nombre"};      # las variables que fueron enviadas sería algo como esto: "http://www.url.com/recibir.pl?nombre=juan&edad=23"
  10. my $edad= $datos{"edad"};
  11. print "tu nombre es $name y tienes $edad años";