2日目:「世界の国からこんにちは」
http://advent.plackperl.org/2009/12/day-2-hello-world.html
さてチュートリアル序盤といえばhello Worldです。
その前に注意書きがあります。
Note: today’s code is written in a raw PSGI interface to understand what’s going on, but in reality you should never have to do this unless you’re a web application framework developer.
今日紹介するコードはPSGIを理解するためのわざとっぽいコードなので、実際はフレームワーク使うから、こんなことはしないんだぜ!
と、書いてある気がします。
さて本編です。どこでもいいのでhello.psgiというファイルを作ります。中身は以下。
my $app = sub {
return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello World' ] ];
};
いきなりサブルーチンから書くようです。
Perlといえば#!/usr/bin/perl か package Hoge;だと思ってたので軽くカルチャーショックですね。
書けたら保存して。次のコマンドでPlackについてるらしいサーバを起動します。
> plackup hello.psgi
HTTP::Server::PSGI: Accepting connections at http://0:5000/
http://127.0.0.1:5000/でアクセスしましょうとのことですが、当方はリモートサーバだったのでhttp://hogehoge.com:5000で。
無事「Hello World」が表示されました!
次に、ちょっとちがうことも!
my $app = sub {
my $env = shift;
return [
200,
['Content-Type' => 'text/plain'],
[ "Hello stranger from $env->{REMOTE_ADDR}!"],
];
};
どうやらデフォルトで、環境変数をハッシュで受け取るようです。
my $app = sub {
my $env = shift;
if ($env->{PATH_INFO} eq '/favicon.ico') {
open my $fh, "<:raw", "/path/to/favicon.ico" or die $!;
return [ 200, ['Content-Type' => 'image/x-icon'], $fh ];
} elsif ($env->{PATH_INFO} eq '/') {
return [ 200, ['Content-Type' => 'text/plain'], [ "Hello again" ] ];
} else {
return [ 404, ['Content-Type' => 'text/html'], [ '404 Not Found' ] ];
}
};
request pathで振り分け。ファイルハンドルをレスポンスにつかえるし、正しいステータスコードも返せますよ!ということらしいです(たぶん)
ふぅ。Day 3につづくんじゃよ。