週末には少しPerlを。

Perlスクリプトの学習日記です。

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;

これだけです。 本当はもっと複雑なことをやらせたいものですが、 まずは練習ということでココまで。