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