perl构造随机数并求交集

发布时间:2020-02-08编辑:脚本学堂
perl构造随机数并求交集

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=();