Frank <mailto:[EMAIL PROTECTED]> wrote:
 
: The results given like this, it seems the loop works only for one time
: 
:  >common_white
: paper
:  >milk_white
: milk

     This is what you asked perl to do. Let's walk the script.

    First time through $item is ">blue". Since $after_white tests false,
this is what happens (nothing).

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
    }
}

    Next time through $item is "sky". Since $after_white tests false,
this is what happens (nothing).

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
    }
}

    Next time through $item is "skirt". Since $after_white tests false,
this is what happens (nothing).

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
    }
}

    Next time through $item is "sea". Since $after_white tests false,
this is what happens (nothing).

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
    }
}

    Next time through $item is ">common_white". Since both
$after_white and "$item =~ /^>/" test true, this is what
happens.

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
        print "$item\n";
        next if $item =~ /^>/;
    }
}

    Next time through $item is "paper". Since $after_white tests true,
but "$item =~ /^>/" tests false, this is what happens. Note that
$after_white will test false after this.

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
        print "$item\n";
        next if $item =~ /^>/;
        $after_white = undef;
    }
}

    Next time through $item is "flower". Since $after_white tests
false, this is what happens (nothing).

foreach my $item ( @items ) {
    $after_white = 1 if $item =~ /white$/;
    if ( $after_white ) {
    }
}


    Do you see the error now? You told perl to stop after the second
line was printed. You didn't give a stopping point like you did last
time.

    You need a small ego to be a computer programmer. You are very
unlikely to run into a perl bug. Assume every problem you have as
your own fault. This often means stepping through a script one line
at a time to find your error.

HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328






-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to