てきとうなメモ

本の感想とか技術メモとか

CGI::Application (1)

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";
}