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.

Другие вопросы по тегам