0

以下は、Net::Server::HTTP の簡単なスクリプトです。

#!/usr/bin/env perl

use strict;
use warnings;

use v5.12;

use HTTP::Headers;

use base qw(Net::Server::HTTP);
__PACKAGE__->run(port => 'localhost:8421');

sub process_http_request
{
  my ($self) = @_;
  my $header = HTTP::Headers->new();

  $header->content_type('text/html');

  print $header->as_string() . "\n"; # <- this works
  # say $header->as_string() . "\n"; # <- this doesn't work and I still have to add a newline

  say "<!doctype html>";
  say "<html>";
  say "<head>";
  say "  <title>Test</title>";
  say "</head>";
  say "<body>";
  say "<h1>Test</h1>";
  say "</body>";
  say "</html>";
}

使用sayすることで改行を追加できると思いましたが、それを追加する必要があり、HTTP::Header各HTTPフィールドに別の改行を追加するas_stringことで. 誰かがここで実際に何が起こっているのか説明してもらえますか?

4

1 に答える 1

0

このバグは、ソフトウェアがNet::Server::TiedHandleの SAY メソッドに適切に委譲せず、PRINT にのみ委譲するように思われます。これを修復する方法がわかりません。

代わりに、Web アプリケーションにはPlackを使用することをお勧めします。

ファイルapp.psgi:

my $html = <<'HTML';
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
</body>
</html>
HTML

my $app = sub {
    return [200, [Content_Type => 'text/html'], [$html]];
};

コマンドライン:

plackup --port 8421
于 2012-05-28T13:26:35.887 に答える