|
ファイル入出力
ではここまでのおさらいです。
ソース
まずは簡単なおみくじです。
用意するもの
・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(数字)); はゲーム製作では必須ですの
で絶対に覚えておいてください。(>_<)ノ
|
|
|