in reply to Re: Re: combine multiple files into one (line by line)
in thread combine multiple files into one (line by line)

Whoops, that's what happens when you submit code without testing it first :). There were four things wrong with my code:
  1. The open call for the MIXED file did not have a '>'. This is sheer carelessness.
  2. I was openning the files to the same typeglob, which resulted in three references to the same open file being stored in the array. This is a more subtle bug.
  3. I was testing for eof after reading in a line, instead of before. This would result in the last line never being written to the mixed file.
  4. Finally, I was using 'last' within the inner loop, foolishly thinking it would get me out of the outer loop. Another dumb mistake.
Working code (at least on my Wintel box) follows:
my @files = ("1.txt", "2.txt", "3.txt"); my @fhs; for ($i = 0; $i < scalar(@files); ++$i) { open($fhs[$i], $files[$i]) || die; } open(MIXED, ">mixed.txt") || die; OUTER: while (1) { foreach $fh (@fhs) { last OUTER if (eof($fh)); $line = <$fh>; print MIXED $line; } } map { close($_); } @fhs; close(MIXED);
Let this be a lesson for me in preliminary testing!

-ton