perlのweb application frameworkといえばcatalystが有名だけど,他のもちょっとやってみようと思って,CGI::Applicationを調べてみた.
CGI::Applicationとは
web application frameworkの一つ.CGI::AppとかC::Aとか省略される.MVCモデルを用いている.けど,catalystほどPlugin化はしていない感じがする.MはCGI::Application::Plugin::DBHなどがあり,VはCGI::Application::Plugin::TTとかがあるけど,入門記事とかはHTML::Templateを用いているのでこれを用いる.
Hello, World
Hello Worldなどを書いてみる.まず,CGIはこんな感じ
$ cat hello.cgi #!/usr/bin/perl use strict; use MyApp::Hello; my $hello = MyApp::Hello->new(); $hello->run();
こっちがモジュール.
$ cat MyApp/Hello.pm package MyApp::Hello; use strict; use base 'CGI::Application'; sub setup { my $self = shift; $self->start_mode('hello'); $self->run_modes( 'hello' => 'hello', ); } sub hello { "Hello, World"; }
これでhello.cgiにアクセスするとHello, Worldと表示される.
run mode
CGI::Appにはrun modeという概念がある.これはだいたいCGIのscreen(フォームやなんらかの出力など)に対応しており,複数のrun modeを一つのモジュールで管理することができる.また,run modesはCGIのパラメタであり,デフォルトではrmという名前を持っている.そのためhello.cgi?rm=helloにアクセスしても同様の結果が出力される.
各run modeは一つの関数に対応しており,run_modesで対応する関数を指定できる.
sub setup { my $self = shift; $self->start_mode('hello'); $self->run_modes( 'hello' => 'hello', ); }
setupはnewするときに呼ばれ,デフォルトのrun modeをhelloにし,run mode 'hello'に対応する関数をhelloにする.
また,関数の戻り値はCGIの出力になるので,run modeがhelloの時,"Hello, World"が出力される.
sub hello { "Hello, World"; }