Este es el código Perl de un CGI que analiza los datos enviados por cualquier formulario y hace un eco de ellos, presentando además los valores de las variables de entorno del sistema.
#!/usr/bin/perl # perl_form - a simple illustration of forms and Perl CGI print "Content-type: text/html\n\n"; &ReadParse; print "<title>La Respuesta</title><h1>La Respuesta</h1><hr>"; print "Aquí están los datos del formulario:<ul>"; foreach $key (keys %in) { print "<li>$key: $in{$key}"; } print "</ul>"; print "y aquí están todas las variables de entorno:<ul>"; foreach $key (keys %ENV) { print "<li>$key: $ENV{$key}"; } print "</ul>"; # Adapted from cgi-lib.pl by S.E.Brenner@bioc.cam.ac.uk # Copyright 1994 Steven E. Brenner sub ReadParse { local (*in) = @_ if @_; local ($i, $key, $val); if ( $ENV{'REQUEST_METHOD'} eq "GET" ) { $in = $ENV{'QUERY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$in,$ENV{'CONTENT_LENGTH'}); } else { # Added for command line debugging # Supply name/value form data as a command line argument # Format: name1=value1\&name2=value2\&... # (need to escape & for shell) # Find the first argument that's not a switch (-) $in = ( grep( !/^-/, @ARGV )) [0]; $in =~ s/\\&/&/g; } @in = split(/&/,$in); foreach $i (0 .. $#in) { # Convert plus's to spaces $in[$i] =~ s/\+/ /g; # Split into key and value. ($key, $val) = split(/=/,$in[$i],2); # splits on the first =. # Convert %XX from hex numbers to alphanumeric $key =~ s/%(..)/pack("c",hex($1))/ge; $val =~ s/%(..)/pack("c",hex($1))/ge; # Associate key and value. \0 is the multiple separator $in{$key} .= "\0" if (defined($in{$key})); $in{$key} .= $val; } return length($in); }