Это действительно не отличается то, что зацикливание через один файл, пока вы обратите внимание на несколько трюков в 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;
Какие исследования вы делали, и где вы застряли? – bzlm
Вы в системе * NIX? 'perl -e 'exec @ARGV' paste/tmp/file1/tmp/file2' :) – pilcrow
@pilcrow: Да, я нахожусь в * NIX, и ваше решение работает нормально. Я не могу поверить, что сам не придумал. Я сделал исследование перед публикацией, но забыл рассмотреть команду paste. Благодарю. –