El original CGI specification hace que sea más fácil ejecutar las cosas desde la línea de comandos y fue diseñado no como una interfaz específica HTTP sino como algo que podría manejar FTP y Gopher así como nuevos esquemas de URL de alto nivel. Sé lo que quería cuando ayudé a especificarlo.
La especificación a la que hice referencia debería darle todo lo que necesita, pero en su mayor parte es solo una colección de variables de entorno. Si ve una solicitud de:
http://some.server.com/some/path?a=b&c=d
Las variables de entorno vienen a buscar de esta manera:
SERVER_PROTOCOL=http
REQUEST_METHOD=GET
HTTP_HOST=some.server.com
SERVER_PORT=80
PATH_INFO=/some/path
QUERY_INFO=a=b&c=d
Para invertir la polaridad de que en Perl sería algo como esto:
$ENV{'SERVER_PROTOCOL'} = 'http';
$ENV{'REQUEST_METHOD'} = 'GET';
$ENV{'SERVER_PORT'} = 80;
$ENV{'PATH_INFO'} = '/some/path';
$ENV{'QUERY_INFO'} = 'a=b&c=d';
system("perl your-CGI-script.pl");
Las cosas se vuelven un poco más complicadas en el manejo de consultas POST y hay más variables de entorno posibles que pueden ser necesarias. Peor de los casos se puede enumerar a todos con un script CGI rápida algo como:
print "Content-Type: text/plain\r\n\r\n";
foreach (keys(%ENV))
{
print "$_=$ENV{$_}\r\n";
}
Ahora poner esto en el servidor web en lugar de la secuencia de comandos CGI y puedes encontrar el ambiente que se pasa en (y el entorno original, por lo que deberá realizar algunas llamadas de evaluación).
Es incluso más fácil que eso; ver http://search.cpan.org/perldoc/CGI#DEBUGGING – ysth
Es cierto que el formulario 'your_script.pl name1 = value1 name2 = value2' funciona para ejecutar el archivo CGI :: App .cgi básico, sin embargo, perdería cualquier capacidad para controlar la entrada, establecer los valores predeterminados, etc. –
Este ejemplo todavía se imprimiría en STDOUT, incluidos los encabezados HTTP, que no es deseable. Además, no es necesario involucrar CGI.pm. Simplemente confunde las cosas cuando pasa y procesa los argumentos directamente desde la línea de comandos con una herramienta de procesamiento de argumentos estándar como Getopt :: Long. –