这个循环该怎么改

my $i=2;
do {
open (OUT,">$st[$i]") or die"$!";
print OUT "in1 in2\n";
  while (<IN>) {
      chomp;
      if (/^\d/) {
         my @line=split/\s+/;
             if ($line[$i]==0) {
                 next;
             }   print OUT "$line[0]\t$line[1]\n";
       }
  }
  $i++;
} while ($i <= 100);

上面的程序总是得不到想要的结果。我的目的是i的初始值为 2,当i小于等于100的时候,要运行那个while循环(while循环是对文件进行操作,而i与文件中的一些序号有关联),也就是说最终要得到的是98个文件(文件名来自于文件中的第一行),可是我运行之后虽然也得到了98个文件,但是文件内容都是空的,但是我如果不用循环来操作的话(也就说一个一个i来赋值),就可以得到想要的结果,但是这样的话很不现实,总不能一个一个来赋值,请高手指点

作者: 超级细菌   发布时间: 2011-05-31

第一次执行过后 IN 都 eof 了还怎么读?那个循环就没意义了

作者: zhlong8   发布时间: 2011-05-31

回复 zhlong8


    那应该再怎样让程序重新读文件呢?

作者: 超级细菌   发布时间: 2011-05-31

不是Perl问题,是人品问题。

作者: 2gua   发布时间: 2011-05-31

在do 结构的内部最后让读文件句柄重新回到最开始处

seek(IN, 0, 0);

作者: Cu_fans   发布时间: 2011-05-31

回复 Cu_fans


    多谢!原来seek还有这个功能,受教了!

作者: 超级细菌   发布时间: 2011-05-31

98 个文件,有必要循环那么多次吗?读一次搞定不就行了

作者: zhlong8   发布时间: 2011-05-31

只进行一次循环,我也这样想过,但是没有思路,求指教。多谢!

作者: 超级细菌   发布时间: 2011-05-31