CGI::Applicationを練習するための最小に近いコードを書いてみる
CGI::Applicatioin
もっと他のフレームワークが今の流行なのかもしれませんが、 温故知新という言葉もあります。 CGI::Applicationを使って文字通りCGIアプリを作るお勉強をしようと思い立ったのです。
最小構成に近い形ということで、テキストボックスに文字列を入力すると 「hoge」を「fuga」に置換して表示するWebアプリ(?)を書いてみます。
.cgiファイル
本体はMyWebApp.pmというファイルに格納してWebサーバーのDocumentRootの外に置きます。 クライアントがアクセスする.cgiファイルは次の通り。
#!/usr/bin/perl use strict; use warnings; use lib "/path/to/CGIApp"; use MyWebApp; my $webapp = MyWebApp->new(); $webapp->run();
MyWebApp.pmファイル
冒頭部分(setup)
package MyWebApp; use base 'CGI::Application'; use strict; use warnings; sub setup { my $self = shift; $self->start_mode('mode1'); $self->run_modes( 'mode1' => 'shform', 'mode2' => 'shresult', ); }
入力フォームがmode1、結果表示画面がmode2です。
入力フォーム
sub shform { my $self = shift; my $q = $self->query(); my $output = ''; $output .= $q->start_html(-title => 'My Web App'); $output .= $q->start_form(); $output .= $q->textfield(-name => 'fruits'); $output .= $q->hidden(-name => 'rm', -value => 'mode2'); $output .= $q->submit(); $output .= $q->end_form(); $output .= $q->end_html(); return $output; }
hiddenでrmをmode2としてサーバーに渡します。
結果表示
sub shresult { my $self = shift; my $q = $self->query(); my $fruits = $q->param('fruits'); my $output = ''; $output .= $q->start_html(-title => 'My Web App - Results'); $fruits =~ s/hoge/fuga/; $output .= $fruits; $output .= $q->end_html(); return $output; } 1;
これだけです。 本当はもっと複雑なことをやらせたいものですが、 まずは練習ということでココまで。