1. ホーム
  2. スクリプト・コラム
  3. パール
  4. アプリケーションのヒント

perlのsrand()とtime関数の使い方の紹介

2022-01-29 21:40:18

perlではsrand()はrand()に乱数の種を提供し、rand()は乱数発生器を生成します。
rand()を最初に呼び出す前にsrand()を呼び出さない場合、srand()が自動的に呼び出されます。
srand()をシードと同じ数値で呼び出すと、同じ乱数列が生成されます。

例を挙げると、次のようになります。

コピーコード コードは以下の通りです。

srand(26); 
$number1=rand(100); 
print "$number1\n"; 
srand(26); 
$number2=rand(100); 
print "$number2\n";

得られた結果は以下の通りです。
F:\>perla.pl 
0.3753662109375 
0.3753662109375

2番目のスランドを取り除くと(26)、次のようになります。

コピーコード コードは以下の通りです。

srand(26); 
$number1=rand(100); 
print "$number1\n"; 
$number2=rand(100); 
print "$number2\n";

得られた結果は以下の通りです。
F:\>perla.pl 
0.3753662109375 
76.397705078125 
F:ⅯⅯⅯ

これによって、同じではない2つの値が生成されます。

添付の小さなプログラムは、20個の乱数値を出力するサブルーチンを利用したもので、srand(time|$$)を利用しています。これは、srandに新しい種を与えるたびに、得られる乱数が異なることを保証し、time関数内部でも、時間が異なるので、現在時刻を取得し、種は異なり、乱数は異なっています。

コピーコード コードは以下の通りです。

#! /usr/bin/perl
my $dna='AACCGTTAATGGGCATCGATGCTATGCGAGCT'; 
srand(time|$$); 
for (my $i=0;$i<20;++$i) 

    print randomposition($dna), " "; 

print "\n"; 
exit; 
sub randomposition 

   my($string)=@_; 
   return int rand length $string; 
}

に関する時間の各関数を説明します。
print "time()=".time(). "\n";# 1970年から現在までの秒数 
print "localtime()=".localtime()."ⅷ";#現在の時刻 
プリント "gmtime()=".gmtime(). "\n";# 標準グリニッジ標準時

出力は以下のようになります。
F:\>perla.pl 
時間()=1350309421 
ローカルタイム()=Mon Oct 15 21:57:01 2012 
gmtime()=Mon Oct 15 13:57:01 2012 
F:ⅯⅯⅯ