Mojolicious::Lite
spiritlooseさんが「HTTP::Engine + HTTP::Engine::Middleware + HTTPx::Dispatcher + Sinatra風インターフェース」というSchenkerをつくっているそうですが、Mojoの方にもMojolicious::Liteという同じようなSinatra風味の軽量ラッパがあります。
使い方はこんな感じ。strictとwarningsはMooseなどと同じく自動的に有効になります。「shagadelicってなんだよ?」という方はUrban Dictionaryの定義をどうぞ(「ちょwエロすぎw」てな意味ですね)。これは(パッケージ末尾の1などとは違う)起動コマンドなんで変更できません。
#!perl use Mojolicious::Lite; get '/' => 'index'; get '/:page' => sub { my $self = shift; $self->render(template => 'content', layout => 'page'); }; shagadelic; __DATA__ @@ index.html.eplite % my $self = shift; <!html> <head><title>home</title></head> <body> <p>home page of this site</p> </body> </html> @@ content.html.eplite % my $self = shift; <p>this page is <%= $self->stash('page') %></p> @@ layouts/page.html.eplite % my $self = shift; <!html> <head><title><%= $self->tx->req->url->path %></title></head> <body> <h1><%= $self->tx->req->url->path %></h1> <%= $self->render_inner %> </body> </html>
これをtest.plとして保存したら、コマンドラインから
perl test.pl daemon
でサーバが起動して、http://localhost:3000/やhttp://localhost:3000/fooにアクセスすれば挙動を確認できます。CGI環境で実行したい場合は「shagadelic;」の部分を「shagadelic('cgi');」にすればOK。例によってMojoベースですから、FTPしか使えないような環境でも試せます。
ちなみに、いまのCPAN版の場合、Windows環境では「@@ layouts/page.html.eplite」の部分を「@@ layouts\page.html.eplite」にしないと正しく動作しないようです。
追記:この問題はMojo 0.991243で修正済みです。
詳細はMojolicious::Liteや、そのもととなったMojolicious、MojoのPODをご覧いただくとして……
今年のYAPC::AsiaでだれかMojoの話してくれないかなあ。ka2uさんとか。perlcodesampleさんとか。