Mojoliciousのコードをとりあえず書いて動かしたいと思って、どっかからコピペしてきて動かそうとするじゃないですか。
で、ここ↑から持ってきました。
use Mojolicious::Lite;
use utf8;
# GETメソッドで「/hello」にアクセスしたときに行う処理を書く
get '/hello' => sub {
my $self = shift;
# パラメータ取得
my $name = $self->param('name');
# テンプレートに使う変数をセット
$self->stash('name' => $name);
# 描画
$self->render();
} => 'index';
# アプリ起動
app->start;
# 以下テンプレート(Mojo::Template)
__DATA__
@@ index.html.ep
<html>
<head>
<title>Hello, <%= $name %></title>
</head>
<body>
こんにちは、<%= $name %>さん
</body>
</html>
で、そこらのドキュメントには、CGIで動かすには拡張子を .cgi にすればいいですよ、って書いてある。それに従って .cgi に拡張子を変更して、ブラウザでアクセスする。そうするとエラーになって動かない。
いままでの自分はそこで挫折してMojoliciousを使うのを諦めてました。
でも、ほんのちょっと書き換えるだけでよかったのです。
use Mojolicious::Lite;
use utf8;
# GETメソッドで「/hello」にアクセスしたときに行う処理を書く
get '/' => sub {
my $self = shift;
# パラメータ取得
my $name = $self->param('name');
# テンプレートに使う変数をセット
$self->stash('name' => $name);
# 描画
$self->render();
} => 'index';
# アプリ起動
app->start;
# 以下テンプレート(Mojo::Template)
__DATA__
@@ index.html.ep
<html>
<head>
<title>Hello, <%= $name %></title>
</head>
<body>
こんにちは、<%= $name %>さん
</body>
</html>
どこが変わったかわかりますか?
get '/' => sub {
ここの部分です。 helloという文字がなくなりました。
これだけで、このcgiはアクセスできるようになります。
で、こっから先なんですが、 http://www.example.com/hello とか、 http://www.example.com/hoge とかやってアクセスに応じて、 挙動を振り分けたいじゃないですか。
で、
# app.cgi
get '/' => sub {
my $self = shift;
# パラメータ取得
my $name = $self->param('name');
# テンプレートに使う変数をセット
$self->stash('name' => $name);
# 描画
$self->render();
} => 'index';
# /hello
get '/hello' => sub {
my $self = shift;
# パラメータ取得
my $name = $self->param('name');
# テンプレートに使う変数をセット
$self->stash('name' => $name);
# 描画
$self->render();
} => 'index';
とやって、helloの部分をまるまる増やして、さあどうやって、この get 'hello' にアクセスしようかってことなんです。
結論は、こうなります。
http://www.example.com/myapp.cgi/hello
これで、hello で書いた関数の挙動にアクセスできるようになります。
わかっちゃえばなんてことないんですけど、でも、.cgiと拡張子が付いたあとにスラッシュをつけるっていう斬新な発想は普通うかばねーよと思うんですが。
とまあ、CGIでもこんなかんじでアプリケーションのルーティングができますというお話