首先,这是我正在使用的代码(您需要 0.42 版的HTTP::Server::Simple才能运行它):
#!/usr/bin/perl
package My::HTTP::Server;
use strict; use warnings;
use parent 'HTTP::Server::Simple::CGI';
sub handle_request {
my $server = shift;
my ($cgi) = @_;
print $cgi->header('text/plain'), $cgi->state, "\n";
}
package main;
use strict; use warnings;
my $server = My::HTTP::Server->new;
$server->cgi_class('CGI::Simple');
$server->cgi_init(sub {
require CGI::Simple;
CGI::Simple->import(qw(-nph));
});
$server->port(8888);
$server->run;
当我启动服务器并浏览到时http://localhost:8888/here/is/something?a=1
,我得到了输出http://localhost:8888E:\Home\Src\Test\HTTP-Server-Simple\hts.pl/here/is/something?a=1
。那是因为CGI::Simple
查看$0
是否$ENV{SCRIPT_NAME}
为空或未定义。所以,我认为解决方案是写:
$server->cgi_init(sub {
$ENV{SCRIPT_NAME} = '/';
require CGI::Simple;
CGI::Simple->import(qw(-nph));
});
现在,我得到的输出是http://localhost:8888//here/is/something?a=1
. 注意额外的/
.
可以吗,还是有更好的方法来解决这个问题?
我正在尝试编写一个可以部署为mod_perl
注册表脚本或独立应用程序的应用程序。