Perl скрипт не закрывает тело?
В примере сценария, который печатает HTML, мне кажется, что тег body не закрыт. Однако у меня никогда не было опыта работы с Perl. Этот пример неверен? или есть что-то еще, что означает, что тело закрыто?
print "Content-type: text/html\n\n";
print "<html>\n<head>\n<title>\nPerl CGI
Example\n</title>\n<body>\n<h1>Hello,
World!</h1>\nYour user agent is: <b>\n";
print $cgi_object->user_agent();
print "<b>.</html>\n";
Где есть .
на последней строке мне кажется, что так и должно быть </body>
1 ответ
Решение
Вы ничего не пропускаете, этот код просто не генерирует конечный тег для элемента body, но этот тег (в отличие от отсутствующего Doctype) является необязательным в HTML в любом случае, поэтому элемент будет закрыт браузером при анализе конца тег для элемента HTML.
Было бы лучше написать что-то вроде этого:
#!/usr/bin/env perl
use strict;
use warnings;
use CGI;
use Template;
my $cgi = CGI->new();
print $cgi->header(-charset => 'utf-8');
my $ua = $cgi->user_agent();
my $tt = Template->new();
$tt->process(\*DATA, { ua => $ua });
__END__
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Perl CGI Example</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>Your user agent is: <em>[% ua | html %]</em>.</p>
</body>
</html>
И еще лучше, если вы бросили CGI и использовали PSGI / Plack.