Hi Jim.
I think yu've got a bit lost in your nexted loops. I've tried to understand what
your code does and is meant to do and have written my interpretation
below. There are a few things that I can't fathom though.
Jim wrote:
> On Friday 04 April 2003 14:34, John W. Krahn wrote:
> > Jim wrote:
> > > I've never encountered this before but I have to be doing something
> > > wrong.
> >
> > Yes, you are. This is the documented behaviour of the numeric variables
> > and is why we always tell beginners to use them only if the regular
> > expression matched.
>
> Ok. I didn't put tests in my example code. However, I do have tests in my
> actual code which is what led me to this whole fiasco. In this code I am
> finding that the first test ($back) pasts...and rightly so. It should.
> However, in the following regex ($line) it should fail sometimes...but it
> doesn't. It doesn't because when $back returns $1 as a valid return from the
> regex then $1 remains a valid rval for the condition for $line. I need to
> get around that!
>
> Here is my code:
>
> 76 for $back ( @data )
> 77 {
> 78 $go_on = 1;
> 79
> 80 # start infinite loop
> 81
> 82 while ( $go_on )
> 83 {
> 84
> 85 # if we see that there is a net_blk
> 86
> 87 $back =~ /.*\(.*\) (.*?) .*/;
> 88
> 89 if ( $1 )
> 90 {
> 91
> 92 # add it to the array
> 93
> 94 push(@ret,$1);
> 95
> 96 # walk it
> 97 push(@done,$1);
> 98 my @more = get_whois($1);
> 99
> 100 # repeat process
> 101 for my $line ( @more )
> 102 {
> 103 $line =~ /.* \(.*\) (.*?) .*/;
> 104
> 105 if ( $1 )
> 106 {
> 107 print "Pushing net_blk: $1\n";
> 108 push(@ret,$1);
> 109 }
> 110 else
> 111 {
> 112 print "Go on to next iteration.\n";
> 113 $go_on = 0;
> 114 }
> 115
> 116 print "Pushing $1 to [EMAIL PROTECTED] stack\n";
> 117 last if ( grep($1,@done) );
> 118 }
> 119 }
> 120 else
> 121 {
> 122 $go_on = 0;
> 123 }
> 124 }
> 125 }
Take a look at this, which has something like your semantics:
foreach my $back ( @data ) {
next unless ( $back =~ /\)\s+(.+)\s+\(/ ) {
push @ret, $1;
push @done, $1;
my @more = get_whois($1);
foreach my $line ( @more ) {
if ( $line =~ /\)\s+(.+)\s+\(/ ) {
print "Pushing net_blk: $1\n";
push @ret, $1;
}
}
print "Pushing $1 to [EMAIL PROTECTED] stack\n";
last if ( grep($1,@done) );
}
The stack pushes are done in the equivalent place, but I think
they're not quite right; in particular the push to @ret is happening
teice. I could make neither head nor tail of your grep() call: all
I know is that it's wrong!
I hope this is a better starting point for you.
HTH,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]