>30の言うとおりに書くと、
open (my $in1,'file1') or die
open (my $in2,'file2') or die
open (my $out,'>result') or die;
while (defined(my $val_1=<$in1>){
 my $val_2=<$in2>;
 if (比較条件($val_1,$val_2)){
  print $out 加工($val_1,$val_2);
 }
}
となって、どこでwhileが入れ子になるのかわからんのだが....

いつの間にか、同一かどうかを比較する話になっているが、
2つのファイルの各行の比較というと、 $val_1 > $val_2 といった条件もあるわけですよね?

もし、同一かどうかを比較するなら、open (my $in ,"diff $file1 $file2|") とやる方法もある。