Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

wrote a code to compare the data between two text files and check for matches
#!usr/bin/perl -w use strict; use autodie; my @human = 'C:\strawberry\perl\bin\humanpathway.txt'; open(HUMAN, "<", @human); my @hum =<HUMAN>; my @output = 'C:\strawberry\perl\bin\output.txt'; open(OUTPUT, ">", @output); my @out =<OUTPUT>; my@bac = 'C:\strawberry\perl\bin\bactpathway.txt'; open(BACT, "<", @bac); my @bact =<BACT>; my $hlindex= $#hum; my $blindex= $#bact; for (my $i=0; $i<=$hlindex; $i++) { chomp ($hum[$i]); my@arr1 = split ("\t",$hum[$i]); my$flag=0; for (my $j=0; $j<=$blindex; $j++) { chomp ($bact[$j]); my @arr2= split ("\t",$bact[$j]); if ( $arr1[1] eq $arr2[1] && $arr1[2] eq $arr2[2] && $arr1[3] eq $arr2 +[3]) { if ($flag==0) { print OUTPUT "$hum[$i]\n"; my $flag=1; } print OUTPUT "$bact[$j]\n"; } } } close HUMAN; close BACT; close OUTPUT;
the error i get while running is
Filehandle OUTPUT opened only for output at C:\strawberry\perl\bin\tri +al.pl line 9. Use of uninitialized value in string eq at C:\strawberry\perl\bin\tria +l.pl line 24, <BACT> line 17.
can someone help figure out the problem with the program?

Replies are listed 'Best First'.
Re: comparing data btwn 2 files
by jethro (Monsignor) on May 11, 2011 at 11:47 UTC

    Did you read the error message and did you take a look at line 9 of your script? Line 9 is: my @out =<OUTPUT>;. So you are trying to read from a filehandle that was opened only for output, just like the error message said.

    The second error probably occurs because the split in the previous line 23 does not split into as many parts as you are expecting. So at least $arr2[3] is uninitialized.The error message tells you that bactpathway.text should have a line not conforming to your expectations.