Как видно из моего кода ниже, я использую apache для обслуживания моего веб-сервера Perl. Мне нужно, чтобы Perl имел несколько вариантов маршрута для моего клиента, как показано в my %dispatch
. Если я подумаю, что все будет очень похоже. Если мы посмотрим на мою подпрограмму sub resp_index
, как я могу ее изменить, чтобы ссылаться на мой файл index.html, расположенный в моем корне: /var/www/perl
?Веб-сервер Perl: Как проложить маршрут
/var/www/perl/perlServer.pl
:
#!/usr/bin/perl
{
package MyWebServer;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
my %dispatch = (
'/index.html' => \&resp_index,
# ...
);
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_index {
my $cgi = shift; # CGI.pm object
return if !ref $cgi;
my $who = $cgi->param('name');
print $cgi->header,
$cgi->start_html("index"),
$cgi-h1("THIS IS INDEX"),
$cgi->end_html;
}
}
my $pid = MyWebServer->new()->background();
print "Use 'kill $pid' to stop server.\n";
Если это упражнение, а не написание собственного веб-сервера, рассмотрите небольшую структуру маршрутизации, такую как [Dancer] (http://perldancer.org/). Кроме того, что со всеми '' \ ''? Наконец, я не уверен, что вы спрашиваете. Кажется, вы спрашиваете, как читать файл? – Schwern
Совет: 'print 'HTTP/1.0 200 OK \ r \ n"; print $ cgi-> header; 'должен быть' print $ cgi-> header ('text/html', '200 OK'); 'или, еще лучше,' print $ cgi-> header; ' – ikegami
Совет:' print "HTTP/1.0 404 Не найден \ r \ n"; print $ cgi-> header; 'должен быть' print $ cgi-> header ('text/html', '404 Not found'); ' – ikegami