perl构造随机数并求交集
命令如下:
#!/usr/bin/perl
use warnings;
use strict;
open (FILE, "$ARGV[0]");
my @data=<FILE>;
my (%hash1, %hash2, $n, $num, $x);
$n=0;
$num=0;
#foreach (1..10000){
$n=0;
while ((keys %hash1)<130){
$hash1{int (rand ($#data))}=1;
#$hash2{int (rand ($#data))}=1;
}
while ((keys %hash2)<120){
$hash2{int (rand ($#data))}=1;
}
foreach $x (keys %hash1){
$n++ if exists $hash2{$x};
}
print "$nn";
#}
本意是有一个文件,40000行,每行都不相同,$ARGV[0],每次从这个文件中随机拿出130行,和120行,输出这两次取得的行一样的个数,$n,做一次上面这个程序结果还行,我现在想做10000次,加了一个foreach循环,但是问题出现了:
输出的10000次结果都是0,我想可能是因为程序有问题,我就手动的运行了几次,发现有的时候结果是0,有时候是1,有时候是2,所以我怀疑程序有问题,请大家指教!
后面的循环%hash1和%hash2都是原有的值,所以10000次$n都是同样的结果。
确实是这么回事,我清空了 $n=0;
忘记清空 %hash1=();和%hash2=();