[求助]如何从3个文件中逐行读取进行逐行比较?

[求助]如何从3个文件中逐行读取进行逐行比较?

我需要逐行读取3个文件,把行号相同的行作比较。以前没同时读3个文件,请问怎么写比较好?
只需要逐行处理,不要把文件一次性完整读入。
while($line1=<FN1>){
  $line2=<FN2>;  $line3=<FN3>;
  ....
}
这样就可以吧,对于文件结束以及文件行数不相等的判定,自己加条件判断吧
不能用数组吗?
我想知道如何用数组结合 for 解决。
用数组就一次读进来.
用数组不是更简单
$/='';
@arr1=<FN1>;@arr2=<FN2>;@arr3=<FN3>;
open $INPUT[0],'<',$BasePath.$FileSource[0] or die "Error: Can't open $FileSource[1]: $!\n";
open $INPUT[1],'<',$BasePath.$FileSource[1] or die "Error: Can't open $FileSource[2]: $!\n";
open $INPUT[2],'<',$BasePath.$FileSource[2] or die "Error: Can't open $FileSource[3]: $!\n";

   for ($i=0; $i<=$#INPUT; $i++) {
      $LineIntmp[$i]=readline $INPUT[$i];
      if (! defined $LineIntmp[$i] or $LineIntmp[$i] eq "\n") {
         print STDERR "\n$FileSource[$i] reach to the end (or a blank line).";
         $tmp=1;
      }  # to confirm all files come to the end.
   }
   goto END if $tmp==1;

我可能没表达清楚。我是想像上面这样解决。 就是没把握文件句柄能否用数组存。

题外话,用不用readline会有区别吗?
0. open时for (0..2)好了
1. FILEHANDLE放数组当然没问题.
2. 读文件一般用<>, readline很少用.
3. goto?
goto是直接跳出循环的。我最初把这句放在for循环内,后来才移到主循环下,懒得改了。现在看来,last应该就可以了。而且while自身也不用加判断。 别的问题还有吗?

while (defined $LineIntmp[0] or defined $LineIntmp[1] or defined $LineIntmp[2]) {
   print STDERR '.' if not $LineNum % 10;
   for ($i=0; $i<=$#INPUT; $i++) {
      $LineIntmp[$i]=readline $INPUT[$i];
      if (! defined $LineIntmp[$i] or $LineIntmp[$i] eq "\n" ) {
         print STDERR "\n$FileSource[$i] reach to the end (or a blank line).";
         $tmp=1;
      }  # to confirm all files come to the end.
   }
   goto END if $tmp==1;
   for ($i=0; $i<=$#INPUT; $i++) {
      chomp $LineIntmp[$i];
      undef $linetmp[$i];
      push @{$linetmp[$i]},split /,/,$LineIntmp[$i];
   }
   my $psID=$linetmp[0][0];
   for ($i=1; $i<=$#INPUT; $i++) {
      if ($psID ne $linetmp[$i][0]) {
         print STDERR "\nProbe Set ID are not the same !\n   $psID\n" if $tmp != 2;
         $tmp=2;
         print STDERR "   $linetmp[$i][0]\n";
      }
   }
   ($CountUp,$CountDown)=(0,0);
   print OUTPUT $psID,$Spacer;
   for ($i=0; $i<=$#INPUT; $i++) {
      $M25=$linetmp[$i][1]>$linetmp[$i][2]?$linetmp[$i][1] : $linetmp[$i][2];
      $M34=$linetmp[$i][3]>$linetmp[$i][4]?$linetmp[$i][3] : $linetmp[$i][4];
      $Ratio=$M34/$M25;
      print OUTPUT $Ratio,$Spacer;
      ++$CountUp if $Ratio>=2;
      ++$CountDown if $Ratio<=0.5;
   }
   print OUTPUT $CountUp,$Spacer,$CountDown,"\n";
   $tmp=0;
   ++$LineNum;
}

END: