§7 リクエストに応答 ステップアップ編

クイズ判定のCGIに入力チェックを付け加え、さらに処理を関数に分けてステップアップさせる。

▼判定ステップアップCGIのサンプル

#!/usr/local/bin/perl
use strict;
use CGI;

# 正解を準備する
my @seikai = ('no','yes','no');

# CGIモジュールを誕生させる
my $query = new CGI;

# フォームからのデーターを取り出す
my $bangou = $query->param('bangou');
my $kotae = $query->param('kotae');

# 回答入力のチェック
unless ($kotae eq 'yes' or $kotae eq 'no') {  #…(1)
    print "Location: error.html\n\n";
}

# 正解の場合、クッキーに保存してフォームページのURLを返す
if ($kotae eq $seikai[$bangou]) {
     seikai();
}
# 不正解の場合、残念ページのURLを返す
else {
     fuseikai();
}

#--------------------------------------------------
# 正解の処理
#--------------------------------------------------
sub seikai {  #…(2)
    my $cookie = $query->cookie(
      -name => 'panda_quiz',
      -value => 'seikai',
      -path => '/');  
    print "Set-Cookie: $cookie\n";
    print "Location: seikai.html\n\n";
}

#--------------------------------------------------
# 不正解の処理
#--------------------------------------------------
sub fuseikai {
    print "Location: fuseikai.html\n\n";
}


■入力のチェック ・・・(1)
unless (条件) { ・・・・・・ }
判定命令にはif以外にunlessがある。ifは「もし・・・ならば・・・する」であるが、unlessは逆で「もし・・・でなければ・・・する」となる。 unlessは否定条件の時だけ処理をしたい場合に使うことが多い。下記の2つの処理は同一である。
if (条件) {処理A} else {処理B}
if (条件) {処理B} else {処理A}

■複数条件 ・・・(1)
ifやunlessには複数の条件を指定できる。その場合の条件の関係をandまたはorで表わす。
if(A and B) {処理A}   両方の条件が成り立てば、処理Aが実行される。
if(A or B) {処理A}   どちらかの条件が成り立てば、処理Aが実行される。

■関数を作る ・・・(2)
sub seikai { ・・・・・・ }
プログラムを続けて書いていると、何をしているプログラムなのか分りづらくなる。 そごて、まとまった処理を関数にして短いプログラムの集まりにする。 メインの処理はあらすじだけを記述して、それぞれの処理は関数の中で行えば、 とても理解しやすいプログラムになる。


戻る メニューへ 次へ