Mojolicious::LiteでWebフレームワークを試す [その2]

前回の続き。

複数のルート(routes)で分ける。

ルート(routes)というのはMojoliciousドキュメントでは以下のように説明されています。

ルート(routes)とは一般的にいうと異なる種類のプレースホルダを含むことのできる仮想的なパスです。

個人的には

同じスクリプトで動作しているけどWebブラウザのアドレスバーには異なるURLのように使えるもの

という極曖昧な理解をしています。
まぁ以下のコードを書いて試してみましょう。

#!/usr/bin/perl
use strict;
use warnings;
use lib qw(/home/users/hogehoge/web/lib/perl/mojo/lib);
use Mojolicious::Lite;

# 以下は / でアクセスできます。
get '/' => sub {
    my $self = shift;
    $self->render( text => 'Hello!' );
};

# 以下は /morning でアクセスできます。
get '/morning' => sub {
    my $self = shift;
    $self->render( text => 'Good morning!' );
};

# 以下は /afternoon でアクセスできます。
get '/afternoon' => sub {
    my $self = shift;
    $self->render( text => 'Good afternoon!' );
};

# 以下は /night でアクセスできます。
get '/night' => sub {
    my $self = shift;
    $self->render( text => 'Good evening!');
};

app->start;

これを"geeting.cgi"としてファイルに保存してサーバにアップすると次のようになると思います。

このようにスクリプトのURLを先頭に/*** をつけると動作が変わります。

引数を渡してみる。

次は引数(パラメータ)を受け取るコード。

#!/usr/bin/perl
use strict;
use warnings;
use lib qw(/home/users/hogehoge/web/lib/perl/mojo/lib);
use Mojolicious::Lite;

get '/:name' => sub {
    my $self = shift;
    my $name = $self->param('name);
    $self->render( text => "Hello, $name!" );
};
app->start;

これを"hello_with_name.cgi"として保存しアップロードします。

http://hogehoge.com/hello_with_name.cgi/Hoge

にアクセスすると"Hello, Hoge!"と表示されます。
ちなみに

get '/' => sub {

の箇所を

get '/' => {name => 'You'} => sub {

と書き換えることでデフォルト値を持たせることも可能です。
つまり

http://hogehoge.com/hello_with_name.cgi/

にアクセスするとデフォルトで'You'が指定されて"Hello, You!"と表示されます。