血液型占い血液型占いをつくってみる前回プログラムへのデータの渡し方(入力)について考えましたが、あれだけではいったい何をやっているのか???な状態だったと思います。そこで、今度はサンプルとしていくつか簡単なデータをやり取りするプログラムを作ってみたいと思います。アルゴリズムまず、簡単な例からです。利用者の選択に応じて、表示内容を変えるためのプログラムです。具体的には最初でやった「おみくじ」のようなプログラムになります。「おみくじ」の場合は画面を変化させるための振分けをサーバー内の時間によって行っていましたが、これを入力されたデータによって変化させる、という単純なものです。プログラムの簡単な流れとしては下のようになります。前回は「おみくじ」だったので、今回は「血液型うらない」にしてみたいと思います。ウェブ上で血液型を聞いて、それに応じた内容を返す、というプログラムです。:AB型:とりあえずソースを見てみましょう。ここからHTMLの表示です。__END__*インデントにスペースを使っています。このままコピーしても動きません。*左端の番号は便宜的に付けた行番号です。'jcode.pl';これは入力された文字コードを変換するために「jcode.pl」というライブラリーを取り込む処理です。前回のデコードでも書きましたが、入力される文字コードによって文字化けとなる可能性があるため、これらを適切な文字コードに変換する必要があります。逆に入力される文字が英数だけならこの処理は要らないと思います。次からの行が前回解説した部分になります。実は、今回のサンプル程度の入力ならこんなに複雑な処理をする必要もないのです。いうことだけですので、「?bloodtype=**」という入力さえ処理できればいいはずです。入力されるのは英文字だけです。$value;*太字の部分が10-23行を置き換えた部分これだけでOKになってしまいます。'jcode.pl'も不要)では、なぜ前回のように複雑なことをしているのかということですが、外部からの入力データを汎用的に扱うことができるようにするためなのです。プログラムに汎用性を持たせる入力というのは今回に限らず、プログラムをするときには必ず必要になってきます。その必ず必要になってくる部分を毎回その入力されるデータごとに合わせて処理をしているのでは、プログラムを作成するときの作業効率が悪くなるからです。上の単純に書いた例では、一つのデータしか扱うことができません。このプログラムだけで終了ならいいのですが、もし、もう一つデータを受け取りたくなった場合には、それ用に書き換える必要もあります。英文字以外を使う場合には文字コードに応じた処理も、、、と考えると、前回のようにある程度一般化する必要があるのです。すると、今回のサンプルで、血液型以外に生年月日と年齢を入力してもらおう、、、と言った場合でも、入力される部分を全く書き換える必要なくデータを取り込むことができます。通常このように一般化(共通化)されて、何度も頻繁に利用される部分だけを抜き出してサブルーチン化します。(またはライブラリーやモジュール化する場合もあるでしょう・・・)よって、次のプログラムではこの入力を実行する部分だけをサブルーチンとして抜き出して処理しています。最後に、入力された内容にしたがって表示させるHTMLを作る部分ですが、前回までのprint命令とはちょっと違う書き方をしています。これはヒアドキュメントという手法です。<<"HTML";ここに自由にテキスト、HTML等を書き込めます。HTML*HTMLの部分はどのような文字でもOKこれを使うと一行ごとにPrintを書かなくてもよくなりますし、ダブルクォーテーション(”)を(\)でエスケープすることも不要です。こんな便利なもの早く教えろ!と言われそうですが、、、また、ヒアドキュメントで書き出された部分の改行は反映されますので、わざわざ「\n」を書かなくても良くなります。逆に、ここで改行して表記してしまうと出力結果にも改行は反映されるので注意が必要です。(<BR>の意味ではないです。念のため・・・)それ以外は通常のPrint文と同じです。複数行OKなPrint文だと思えばOKでしょう。