We Wish You A Merry Chrismas

Advent Calendar大流行り

今年はPerlネタのAdvent Calendarが大流行りですね.miyagawaさんのPlack Advent Calendar Day 2の記事を見て,ちょっと試してみたのでそのメモです.

env.psgi

miyagawaさんの記事では

my $app = sub {
    my $env = shift;
    return [
        200,
        ['Content-Type' => 'text/plain'],
        [ "Hello stranger from $env->{REMOTE_ADDR}!"],
    ];
};

となっていたので,どんなエントリがあるのか全部出力させてみました.

environment: 
 $VAR1 = {
          'psgi.multiprocess' => '',
          'SCRIPT_NAME' => '',
          'SERVER_NAME' => 0,
          'HTTP_ACCEPT_ENCODING' => 'gzip,deflate',
          'HTTP_CONNECTION' => 'keep-alive',
          'PATH_INFO' => '/',
          'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
          'REQUEST_METHOD' => 'GET',
          'psgi.multithread' => '',
          'HTTP_ACCEPT_CHARSET' => 'Shift_JIS,utf-8;q=0.7,*;q=0.7',
          'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',
          'QUERY_STRING' => '',
          'SERVER_PORT' => 5000,
          'HTTP_CACHE_CONTROL' => 'max-age=0',
          'HTTP_ACCEPT_LANGUAGE' => 'ja,en-us;q=0.7,en;q=0.3',
          'REMOTE_ADDR' => '127.0.0.1',
          'HTTP_KEEP_ALIVE' => '300',
          'SERVER_PROTOCOL' => 'HTTP/1.1',
          'psgi.errors' => *::STDERR,
          'REQUEST_URI' => '/',
          'psgi.version' => [
                              1,
                              0
                            ],
          'psgi.url_scheme' => 'http',
          'psgi.run_once' => '',
          'HTTP_HOST' => 'localhost:5000',
          'psgi.input' => \*{'Plack::Server::Standalone::$input'}
        };

色々沢山ありますね.ちなみに,これを出力させるスクリプトはこんな感じでした.

use Data::Dumper;
my $app = sub {
    my $env = shift;
    return [
        200, [ 'Content-Type' => 'text/plain' ],
        ["environment: \n " . Dumper( $env )],
    ];
};

あれ,ストリームデータのときはどうやってデータを渡すんだろう.興味深いですね.