Это на самом деле ничем не отличается от циклического прохождения одного файла, если вы обращаете внимание на некоторые приемы Perl.
Для одного файла обычно используется
use strict;
use warnings;
use English qw(-no_match_vars);
my $filename = 'foo';
open my $file, '<', $filename or die "Failed to open '$filename' $OS_ERROR\n";
while (my $line = <$file>) {
# work with $line
}
close $file;
Это можно расширить до двух файлов, открыв оба и изменив условие цикла так, чтобы оно заканчивалось только после окончания чтения обоих файлов.
Но есть ловушка, когда Perl видит простое чтение из дескриптора файла как условное для цикла while, он оборачивает его в defined()
для вас, поскольку условное теперь больше, чем простое чтение, это нужно делать вручную.
use strict;
use warnings;
use English qw(-no_match_vars);
my $filename1 = 'foo';
my $filename2 = 'bar';
open my $file1, '<', $filename1 or die "Failed to open '$filename1' $OS_ERROR\n";
open my $file2, '<', $filename2 or die "Failed to open '$filename2' $OS_ERROR\n";
my ($line1, $line2);
while ( do { $line1 = <$file1>; $line2 = <$file2>; defined($line1) || defined($line2) } ) {
# do what you need to with $line1 and $line2
}
close $file1;
close $file2;