in reply to Simple filter from rows of input file
is not going to do what you want. Once you've read REP the first time for the first value found in SEQ, your while <REP> loop is never going to loop again on the file and will give you an empty (or actually undef) value. You've reached end of file, you need either to close the file and re-open it, or to use the seek function to get back at the beginning. So, in brief, this code is completely broken.open (SEQ, "<$ARGV[0]"); open (REP, "<$ARGV[1]"); open (OUT, ">$ARGV[2]"); while (<SEQ>){ $seq = $_; while (<REP>){ print OUT if /$seq/; } }
Having said that, I was only pointing to this error in your code, to make you aware of the problem, I am really not suggesting that you should read the whole second file each time through your process. This would be immensely wasteful.
If I understand correctly what you are trying to do, you should probably just read once the first file, chomp its content and store it in a hash. Then you can read the other file and do what you want, depending on whether the hash element exists or not. But that works only if you are looking for exact matches (in which case the quotemeta thing might not be needed). Well, in brief, you should give us some more details on the contents of the two input files.
|
|---|