http://www.perlmonks.org?node_id=1020449


in reply to Re^2: matching problem
in thread matching problem

I only have the locus_acc_no = printed out several times and it has no value.

Use a text editor, and do a search on $locus_acc_no. You will see it occurs 4 times in the code:

  1. my $locus_acc_no = "";
    Here it is declared and initialised to the empty string.

  2. $locus_acc_no = "";
    Here (within an if block) it is conditionally re-set to the empty string.

  3. if ($line =~ ModuleMatching::MatchLAC($locus_acc_no)) {
    Here it is passed into1 the function ModuleMatching::MatchLAC.

  4. print "locus_acc_no ", $locus_acc_no;
    Here its value is printed.

So it is never set to anything but the empty string, which is what gets printed! This is essentially the same point already made by linuxer, above. You fixed the warning but failed to address the underlying logic problem.

I don’t know anything about the ModuleMatching module, which I can’t find on , but I think it’s highly unlikely that this line:

if ($line =~ ModuleMatching::MatchLAC($locus_acc_no)) {

can be correct. But without knowing what sub ModuleMatching::MatchLAC is supposed to do, it’s hard to give advice.

Hope that helps,

1Since Perl uses pass-by-reference, it is possible that ModuleMatching::MatchLAC sets the value of $locus_acc_no; except that MatchLAC receives no information to use in determining the new value.

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,