Hola pues esta es otra función que también me encontré por ahí y la modifiqué para que fuera más funcional.
Esta función lo que hace es escribir en el navegador o leer de él, cookies para despues usarlas en lo que gustes.

El código es este:

PERL:
  1. sub set_cookie {   #funcion para escribir cookies
  2.     my ($name, $value, $expiration, $path) = @_#recibimos los parametros enviados (nombre de la cookie, su valor, tiempo de vida, direccion)
  3.     print '<meta http-equiv="Set-Cookie" content="'.$name.'='.$value.';expires='.$expiration.'; path='.$path.'">'; #escribimos la cookie en los headers del navegador
  4.     return(1);
  5. }
  6.  
  7. sub get_cookie {  #funcion para leer cookies
  8.     my (@cookies, %return_cookie, $cookie, $key, $val);   #declaramos variables a usar
  9.     @cookies = split (/; /,$ENV{'HTTP_COOKIE'});            #leemos las cookies de la variable de entorno "HTTP_COOKIE" y las metemos al array "@cookies"
  10.     foreach $cookie (@cookies)                                     #separamos cookies y las metemos en un array "%return_cookie"
  11.         {
  12.          ($key, $val) = split (/=/,$cookie);
  13.          $return_cookie{$key} = $val;
  14.         }
  15.     return (%return_cookie);                                        #nota: esta funcion regresa todas las cookies con vida, ya despues tu eligiras cual usar.
  16. }
  17. 1;

y la manera de usarse es esta:

escribir_cookie.pl

PERL:
  1. #!/usr/bin/perl
  2. use strict;
  3. use CGI::Carp qw(fatalsToBrowser);
  4. print "content-type:text/html\n\n";
  5.  
  6. #los guardamos en cookies
  7. &set_cookie("nombre","pepe");
  8. &set_cookie("edad","24");

leer_cookie.pl

PERL:
  1. #!/usr/bin/perl
  2. use strict;
  3. use CGI::Carp qw(fatalsToBrowser);
  4. print "content-type:text/html\n\n";
  5.  
  6. #leemos las cookies
  7. my %cookies = &get_cookie;
  8. my $nombre = $cookies{"nombre"};
  9. my $edad = $cookies{"edad"};
  10.  
  11. print "nombre: $nombre <br>edad: $edad";