thanks John and Rob for the great enlightenment, they taught me a lot. I wonder why the following is wrong: while (($in1=<IN1>) && ($in2=<IN2>)) { .. }
Ben Rob Dixon wrote: > <[EMAIL PROTECTED]> wrote: > > > > I need to read from more than one file at a time and do some > > operation on the strings and join them together, and put into > > one output file. > > > > Here is the code. But I noticed the second file never get > > read. It must be sth very simple to overcome this. Can anyone > > give me a hint? > > > > thanks, > > Ben > > > > # Usage: perl jointfiles.pl infile1 infile2 outfile > use strict; > use warnings; > > open (IN1, $ARGV[0]); > > open (IN2, $ARGV[1]); > > open (OUT, ">$ARGV[2]"); > As John says, > open IN1, $ARGV[0] or die $!; > open IN2, $ARGV[1] or die $!; > open OUT, ">$ARGV[2]" or die $!; > > print "Input fileis : $ARGV[0], $ARGV[1]n"; > > print "Output file: $ARGV[2]n"; > > > > while(<IN1>) > > { > > chomp; > > $in1=$_; > > <IN2>; > > $in2=$_; > > printf OUT "$in1$in2n"; > > } > You need tp think about what happens when the two files are > different lengths. You may not expect that to happen but your > code should still handle that case. Some symmetry between the > handling of the two files would also be nice. Finally you > should really use 'print' here instead of 'printf'. > This code reads a line from each file and outputs them both > until one or other file is exhausted. > my ($in1, $in2); > while (defined ($in1 = <IN1>) and defined ($in2 = <IN2>)) { > chomp ($in1, $in2); > print OUT "$in1$in2n"; > } > > close(IN1); > > close(IN2); > > close(OUT); > HTH, > Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]