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さんとか。