从index.html文件中读取perl

时间:2016-10-27 04:31:01

标签: 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::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";

谢谢。

1 个答案:

答案 0 :(得分:0)

当您访问服务器的根URL时,您的代码已明确配置为resp_hello()

my %dispatch = (
    '/' => \&resp_hello,
);

我不确切地知道您希望实施哪种网址结构,但如果您尝试区分//index.html,那么您可以执行以下操作:< / p>

my %dispatch = (
    '/' => \&resp_hello,
    '/index.html' => \&resp_index,
);

然后编写一个resp_index()子例程,打开index.html文件并将内容返回给浏览器。

你可以扩展这个,我想直接提供文件系统中存在的任何文件。

但我不得不想知道你为什么要自己做这个,而不只是找到使用PSGI and Plack的解决方案。你在哪里有想法使用HTTP :: Server :: Simple?

我很高兴看到documentation鼓励使用CGI.pm中的HTML生成功能。我们已经知道他们在相当长的一段时间内有多糟糕的想法了,they are now deprecated

在您花费太长时间沿​​着这条路走下去之前,我恳请您研究更多标准的Perl网络工具。