从index.html文件读取perl

从index.html文件读取perl,perl,web-services,sh,Perl,Web Services,Sh,我试图使用perl作为特定地址的web服务器:端口号,10.x.x.x:portNumber,同时还让它显示默认情况下index.html文件中的内容。但是,当我在浏览器中运行10.x.x.x:portNumber时,perl不会显示index.html的内容。如何让perl从文件中读取 这是我处理这个问题的代码 #!/usr/bin/perl { package MyWebServer; use HTTP::Server::Simple::CGI; use base qw(HTTP::Serv

我试图使用perl作为特定地址的web服务器:端口号,10.x.x.x:portNumber,同时还让它显示默认情况下index.html文件中的内容。但是,当我在浏览器中运行10.x.x.x:portNumber时,perl不会显示index.html的内容。如何让perl从文件中读取

这是我处理这个问题的代码

#!/usr/bin/perl
{
package MyWebServer;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
my %dispatch = (
    '/' => \&resp_hello,
);


sub handle_request {
    my $self = shift;
    my $cgi  = shift;
    my $path = $cgi->path_info();
    my $handler = $dispatch{$path};
    if (ref($handler) eq "CODE") {
        print "HTTP/1.0 200 OK\r\n";
        $handler->($cgi);
    } else {
        print "HTTP/1.0 404 Not found\r\n";
        print $cgi->header,
        $cgi->start_html('Not found'),
        $cgi->h1('Not found'),
        $cgi->end_html;
    }
}


sub resp_hello {
    my $cgi  = shift;   # CGI.pm object
    return if !ref $cgi;
    my $who = $cgi->param('name');   
    print $cgi->header,
        $cgi->start_html("Hello"),
        $cgi->h1("Hello Perl"),
        $cgi->end_html;
}
}


my $pid = MyWebServer->new(XXXX)->background();
print "Use 'kill $pid' to stop server.\n";

谢谢。

您的代码已明确配置,请在访问服务器的根URL时运行
resp\u hello()

my %dispatch = (
    '/' => \&resp_hello,
);
我不知道您希望实现什么样的URL结构,但是如果您试图区分
/
/index.html
,那么您可以这样做:

my %dispatch = (
    '/' => \&resp_hello,
    '/index.html' => \&resp_index,
);
然后编写一个
resp_index()
子例程,打开
index.html
文件并将内容返回浏览器

我想您可以扩展它,直接为文件系统上存在的任何文件提供服务

但我想知道,为什么你要自己做这件事,而不仅仅是寻求一个可以使用的解决方案。您是从哪里想到使用HTTP::Server::Simple的

我震惊地看到,这鼓励使用CGI.pm中的HTML生成函数。在相当长的一段时间里,我们都知道这是一个多么可怕的想法


在您花太多时间研究这一问题之前,我建议您研究更多标准的Perl web工具。

您如何通过浏览器调用Perl脚本?