Нажмите для ввода режима редактирования, запускающегося в конце строки.
После дальнейшего изучения документации CGI :: App и CGI выяснилось, что быть более простым, чем я думал. В простейшем случае (без реальной обработки аргументов или обработки выходных данных вызова run webapp):
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use WebApp;
my $cgi = new CGI( \%{@ARGV} );
my $webapp = WebApp->new( QUERY => $cgi );
$webapp->run();
Для создания CGI требуется просто серия пар значений, разделенных пробелами. Вам нужно передать режим выполнения и все аргументы.
The original CGI specification makes it easy to run things from the command line and was fully intended not as a specific HTTP-only interface but something that could handle FTP and gopher as well as new top-level URL schemes. I know what I wanted when I helped specify it.
The spec I referenced should give you all you need, but for the most part it is just a collection of environment variables. If you see a request for:
http://some.server.com/some/path?a=b&c=d
The environment variables come out looking like this:
SERVER_PROTOCOL=http
REQUEST_METHOD=GET
HTTP_HOST=some.server.com
SERVER_PORT=80
PATH_INFO=/some/path
QUERY_INFO=a=b&c=d
To reverse the polarity of that in Perl would go something like this:
$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");
Things get a bit more complicated in handling POST queries and there are more possible environment variables that may be required. Worst case you can enumerate them all with a quick CGI script something like:
print "Content-Type: text/plain\r\n\r\n";
foreach (keys(%ENV))
{
print "$_=$ENV{$_}\r\n";
}
Now put that on the web server in place of your CGI script and you'll see all the environment that gets passed in (and the original environment so you'll need to make a few judgement calls).
Таким образом:
$ perl yourscript.pl field1=value1 field2=value2
Библиотека Perl CGI позаботится о магии за вас, и похоже, что CGI :: Application полагается на CGI (судя по их примеру кода).
Вместо того, чтобы проходить через CGI :: Application каждый раз, когда вы хотите что-то сделать, обеспечьте надлежащее разделение задач , возможно, используя настройку MVC . Все функциональные возможности должны существовать вне CGI :: Application, поскольку они должны работать только как контроллер. После того, как вы отделите эти биты, вы можете легко написать другие контроллеры для других методов ввода.
Не пишите веб-приложение; напишите приложение, у которого есть веб-интерфейс. Когда у вас есть это, вы можете легко предоставить своему приложению другие виды интерфейсов.
Вы можете автоматизировать, позвонив веб-приложение с помощью curl, wget или GET-скрипта LWP с соответствующими параметрами. Я использовал аналогичную систему для задач, управляемых cron, с приложением Catalyst.
Это касается всех переменных среды для вас ..