在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:\>perl\a.pl
0.3753662109375
0.3753662109375
若果我們把第二個srand(26)去掉,如下:
複製代碼 代碼如下:
srand(26);
$number1=rand(100);
print "$number1\n";
$number2=rand(100);
print "$number2\n";
得到的結果如下:
F:\>perl\a.pl
0.3753662109375
76.397705078125
F:\>
這樣產生的兩個數值就不一樣了。
附帶一個小程式,利用了一個子程式,隨機輸出了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;
}
我們就time的各個函數做出說明:
print "time()=".time()."\n";#從1970年到現在的秒數
print "localtime()=".localtime()."\n";#目前時間
print "gmtime()=".gmtime()."\n";#標準格林威治時間
輸出結果如下:
F:\>perl\a.pl
time()=1350309421
localtime()=Mon Oct 15 21:57:01 2012
gmtime()=Mon Oct 15 13:57:01 2012
F:\>