占いページを作ってみる(7) 占い結果の作成ロジック その2

前回の続きです。
今回は、前回作ったMyUranai.pmに占い結果をランダムに選べるようにする機能をつけるところまでやります。

package MyUranai;

use strict;

my $uranai_text = <<'URANAI';
今日はいい運勢です。外に出よう。
今日はダメな日です。運動をすると吉。
恋がはじまる予感。
何をやってもうまくいく日です。
人間関係のトラブルに気をつけて。
空から何か落ちてくる日。
思いもよらない人から声をかけられるかも。
ラッキーカラーはオレンジ。
本を読もう。
金運上昇中。思い切った行動に出ても大丈夫。
悩み事を誰かに相談すると吉。
URANAI

sub new{
	my $pkg = shift;
	bless {}, $pkg;
}

sub getUranaiText{
	my $self = shift;
	my $seiza = shift;
	
	#占いテキストをリスト化
	my @uranai_array = split(/\n/, $uranai_text);
	
	#今の時間を取得
	
	#ランダムに占い結果を選ぶ
	my $rand_index = rand($#uranai_array + 1);
	
	return @uranai_array[$rand_index];
}


1;

こんな感じになりました。
MyUranai.pmに追加した部分の説明ですが

my $uranai_text = <<'URANAI';
今日はいい運勢です。外に出よう。
今日はダメな日です。運動をすると吉。
恋がはじまる予感。
何をやってもうまくいく日です。
人間関係のトラブルに気をつけて。
空から何か落ちてくる日。
思いもよらない人から声をかけられるかも。
ラッキーカラーはオレンジ。
本を読もう。
金運上昇中。思い切った行動に出ても大丈夫。
悩み事を誰かに相談すると吉。
URANAI

占い結果に表示するテキストを、ヒアドキュメントでモジュール内に書いてます。本当はデータベース化しておくべきなのかもですが、今回はやっつけでこんな感じに。このテキストを利用する時には

	#占いテキストをリスト化
	my @uranai_array = split(/\n/, $uranai_text);

とやって、改行で分割し、配列にしています。


それから、

	#ランダムに占い結果を選ぶ
	my $rand_index = rand($#uranai_array + 1);
	
	return @uranai_array[$rand_index];

では、rand関数の引数に占いテキスト配列の最終要素のインデックス+1を与えています。これでrand関数の戻り値は、「0〜占いテキスト配列の最終要素インデックス」になりますね。
これで、一応、用意された占いテキスト配列から、ランダムに占いテキストを選べるようになったわけです。


では、このMyUranai.pmをuranai.cgiで使ってみましょう。
とりあえず今回はMyUranai.pmはuranai.cgiと同じディレクトリにアップロードします。

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

use CGI;

my $q = CGI->new();

my $uranai = $q->param('uranai');

use lib qw(./);
use MyUranai;
my $myUranai = MyUranai->new();

#「占う」ボタンが押されたら
my $uranai_html;
if($uranai){
	#占いの結果を作成する
	my $uranai_kekka = $myUranai->getUranaiText();
	$uranai_html = <<"URANAI_END";
<div id="kekka">
<h2>占い結果</h2>
$uranai_kekka
</div>
URANAI_END
}


#ここから、HTMLページ
(省略)

説明

use lib qw(./);
use MyUranai;
my $myUranai = MyUranai->new();

これによって、$myUranaiというMyUranaiクラスのインスタンスを作成します。
それから

	my $uranai_kekka = $myUranai->getUranaiText();

この部分で、実際にMyUranaiモジュールが作成した占いテキストを取得しています。
まあ、簡単ですよね。


ここまで作ってて、当初考えていた仕様である、星座とか時間とかの要素をどう占い結果にからめればいいのか…、ちょっと悩んできました。
次回は星座情報をcookieに保存しましょう。公開できるレベルになるまであともう少しです。