萌えPerl
しきり線
大項目 ファイル入出力
 ではここまでのおさらいです。
中項目 ソース
ハッシュたん
 まずは簡単なおみくじです。
用意するもの
・kuji.txt くじ引きの中身
・html.txt HTMLの基
・filetest01.cgi プログラム
 大まかな流れは、
「kuji.txt からデーターを読んで、その中の1つをランダムに選び、html.txt に埋め込 んで出力する」
 というようなことになります。
 というわけで以下ファイルの詳細です。

・kuji.txt
大吉です(^-^)
中吉です(^o^)
中吉です(^_^)
少吉です(-_-)
少吉です(・_・)
少吉です(e_e)
少吉です( ^ω^)
凶です(T_T)
大凶時々吉(-_-;
昨日は大吉でしたm9(^Д^)
寿司食え(´・ω・)
死ねばいいのに_| ̄|○
縦横無尽大爆走(>_<)ノ
うんこ踏んだり蹴ったり(´д`)
君しかいない!!!(@_@)
ブラボー!ブラボー!ブラボー!(´ー`)
 ↑何行でもかまいません。

・html.txt
<HTML>
<HEAD><TITLE><TMPL_VAR title></TITLE></HEAD>
<BODY>
<TMPL_VAR title><BR>
********************************************<BR>
<TMPL_VAR testvalue><BR>
********************************************<BR>
</BODY>
</HTML>
 <TMPL_VAR title>と<TMPL_VAR testvalue>にプログラムで好きなように文 字が埋め込まれます。

・filetest01.cgi
#!c:/perl/bin/perl
#HTML出力ルーチン
sub html {
  #値をセット
  my ($template, $data) = @_;
  #HTMLテンプレートを読み込み
  open(IN,$template);
  my @html = <IN>;
  close(IN);
  my $html = join "", @html;
  #HTML内の所定の文字を値と入替え
  # <TMPL_VAR title> と <TMPL_VAR testvalue>
  for(keys %$data){
    $html =~ s/<TMPL_VAR $_>/$data->{$_}/g;
  }
  #出力
  print "content-type: text/html; charset=Shift_JIS\n\n";
  print $html;
}
#データファイル→おみくじ結果
open(IN,"kuji.txt");
my @kuji = <IN>;
close(IN);
my $max = @kuji;
my $rand = int(rand($max));
#HTMLファイルにセットする値をハッシュで作成
my %data=(
  title    =>"萌えファイルテスト",
  testvalue=>$kuji[$rand]
);
#HTML出力ルーチンで出力、ハッシュデータはリファレンスに
html("html.txt",\%data);

 この3ファイルを同じところに置いて filetest01.cgi をブラウザで読み込むと、例えば以下 のように表示されます。

萌えファイルテスト
********************************************
ブラボー!ブラボー!ブラボー!(´ー`)
********************************************

中項目 役割ごとにファイルを分けてみました
ハッシュたん
 このプログラムの特徴は、データファイルとHTMLファイルとプログラムファイルを 分離している点です。
 こうしておくと、おみくじの内容は kuji.txt を、デザインは html.txt に手を加える だけで良く、しかもその際にはperlの知識はほとんど必要ないので、他人と分業できます。
 実際問題、こんなに小さいプログラムではあまりご利益は感じられませんが、大きくな ってくると整理できてわりかし便利です。

  for(keys %$data){
    $html =~ s/<TMPL_VAR $_>/$data->{$_}/g;
  }
 はハッシュのリファレンスで受け取った値をHTMLデータに埋め込む部分です。
 for(keys %$data) の keys はハッシュのキーを返す関数で、例えば、@key = keys( %hash ); と すると、@keyにはこのハッシュのキーだけの配列ができます。
 同じく値の方は、@value = values( %hash ); で取り出せます。
 今回の場合は $_ にキーの文字列を順番に代入しています。
 $_ が分かりにくかったら下記のようにして、いったん $key に代入して使用するのも 良いですね。
 foreach $key ( keys %hash ){処理}
 リファレンスなので、正規表現で置き換える部分では $data{$_} ではなく矢印をつけ て $data->{$_} とします。
 こういう式を用意しておくことによって、後から
my %data=(
  title    =>"萌えファイルテスト",
  testvalue=>$kuji[$rand]
);
 に好きなだけ値を設定できます。
 出力基のHTMLファイルには<TMPL_VAR title>や<TMPL_VAR testvalue> のように、<TMPL_VAR ハッシュのキー>の形式で書 いておけばおkです。

 あと my $rand = int(rand($max)); の部分ですが、 rand(数値)が0から数値までのランダム な数値をセット、で、int(数値)は数値を整数値に変換、 です。
 例えば、my $x = int(rand(10)); とすると、$x には0から9までの数字がランダムに セットされます。
 int(rand(数字)); はゲーム製作では必須ですの で絶対に覚えておいてください。(>_<)ノ