ランダムに画像を表示する |
ランダムに画像を変えるには、乱数を発生させてそれをキーに画像を決定することができます。乱数を発生させる関数は
rand() ですが、単純にこれだけを実行したのでは乱数は得られません。rand()
を実行する前に、srand() を実行します。これは乱数を発生させるシード(種)を設定します。srand()
の引数には、どんな値を指定しても良いのですが、例えば乱数を使ってパスワードを生成する場合などは、できるだけ予測できない値を指定しなければなりません。このサンプルスクリプトのようにセキュリティには問題がない場合はそれほど気にする必要はありませんが。一般的に使われている方法は
# 種を仕込む srand(time()^($$ + ($$<<15))); # 0 から 9 の乱数を発生させる。 $val = int(rand(10)); |
のように time と $$ (プロセスID) を使って種を仕込んでいます。
srand() の引数を省略した場合は、srand(time) と同等です。
rand() の引数には正数を指定し、0 からこの正数までの少数点以下を含んだ乱数を発生させます。整数を得る場合は
int() を使い、例えば、int(rand(3)) とすると 0, 1, 2 の3つの数がランダムに得られます。
#!/usr/bin/perl # # randimage.cgi # # (C)1999 Kaoru Fujita # $Title = 'ランダムに画像を表示するサンプル'; $IMGLoc = '/images'; # 種を仕込む srand(time()^($$ + ($$<<15))); # 0 から 9 の乱数を発生させる。 $val = int(rand(10)); print <<END_OF_HTML; Content-type: text/html <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-2022-jp"> <META HTTP-EQUIV="Refresh" CONTENT="5"> <TITLE>$Title</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <IMG SRC="$IMGLoc/$val.gif"> </BODY> </HTML> END_OF_HTML exit(0); #--End of randimage.cgi |