my @qfns; my @fhs; for my $qfn (@qfns) { open(my $fh, '<', $qfn) or die("Can't open \"$qfn\": $!\n"); push @fhs, $fh; } for (;;) { my @lines; my $all_done = 1; my $some_done = 0; for my $fh (@fhs) { push @lines, my $line = <$fh>; if (defined($line)) { $some_done = 1; } else { $all_done = 0; } } exit(0) if $all_done; die("Premature eof\n") if $some_done; chomp @lines; print(join(' ', @lines), "\n"); }