[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Omaha.pm] Could use your help
On Jan 18, 2007, at 11:38 AM, kiran bina wrote:
FILE: Has a lot of entries in random order of entries of my
interest. I am interested in selected few whose name I wish to get
from IN using the subroutine
Problem: This prints only 'C' even when I have entries in IN
which should allow printing A or B.
I think I do not have my return statement at the right place.
while <FILE>
{
$string= 'Foo';
$status= find_member_status($string)
if ($string eq $status)
{
if (defined $object)
{
Print "A";
}
else
{
Print "B";
}
}
else
{
Print "C";
}
}
sub find_member_status
{
my $name= shift;
my $rval= 'NA';
my $no_match_name;
while (my $line=<IN>)
{
if ($line=~ /\>/)
{
$line=~ m/\>(gi\|\d+\|gb\|\S+\|)/;
$no_match_name= $1;
print "Name= $name\n";
print "After: $no_match_name\n";
if ($name eq $no_match_name)
{
$rval= $no_match_name;
# return $rval;
last;
}
}
}
return $rval;
}
Hmm... I think down here
$line=~ m/\>(gi\|\d+\|gb\|\S+\|)/;
$no_match_name= $1;
print "Name= $name\n";
print "After: $no_match_name\n";
your regex is demanding 'gi|' followed by digits, etc.
So $no_match_name will always be undef or start with 'gi|' followed
by digits, etc. You should see that when you print "After:
$no_match_name" ... ?
So, when we back up to the top:
$string= 'Foo';
$status= find_member_status($string)
if ($string eq $status)
$status will always be undef or start with 'gi|' followed by digits.
So it will never eq 'Foo'.
Perhaps you meant to test if $status *contains* 'Foo'?
if ($status =~ /\Q$string\E/)
?
HTH,
j