免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1871 | 回复: 3
打印 上一主题 下一主题

求助perl:怎么让一段命令循环多次 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-29 14:29 |只看该作者 |倒序浏览
命令如下:
#!/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 "$n\n";
     
#}

本意是有一个文件,40000行,每行都不相同,$ARGV[0],每次从这个文件中随机拿出130行,和120行,输出这两次取得的行一样的个数,$n,做一次上面这个程序结果还行,我现在想做10000次,加了一个foreach循环,但是问题出现了:
输出的10000次结果都是0,我想可能是因为程序有问题,我就手动的运行了几次,发现有的时候结果是0,有时候是1,有时候是2,所以我怀疑程序有问题,请大家指教!
谢谢

论坛徽章:
0
2 [报告]
发表于 2010-06-29 15:01 |只看该作者
既然没人回复,我就自己回复一下吧:
我做了一个sh文件,让我上面的命令执行10000次,这样得到的结果和我用循环得到的结果不一样,就是执行起来慢点

论坛徽章:
0
3 [报告]
发表于 2010-06-29 15:32 |只看该作者
你后面的循环%hash1和%hash2都是原有的值,所以10000次$n都是同样的结果
  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;


  4. for  (1..100){
  5.         my (%hash1, %hash2);
  6.          my $n = 0;
  7.         while ((keys %hash1)<130){
  8.                 $hash1{int(rand(4000))}=1;
  9.         }

  10.         while ((keys %hash2)<120){
  11.                 $hash2{int(rand(4000))}=1;
  12.         }

  13.         foreach my $x (keys %hash1){
  14.                 $n++ if exists $hash2{$x};
  15.         }
  16.         print "$n\n";
  17. }
  18. <STDIN>;
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-06-29 15:37 |只看该作者
回复 3# iamlimeng


    恩 ,谢谢!确实是这么回事,我清空了 $n=0;
      忘记清空 %hash1=();和%hash2=();
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP