Ok, I stand corrected, but I never use the two condition conditional.  I believe the 
example presented here would not work, since there is no assignment to $line before 
the test for "__END__".  It could be assigned later, after the test, but that's 
generally bad practice.  Second, the while() will not exit when $exitloop is true 
since an OR was used.  

while(<FH> && !$exitloop )

would work.

while(<FH> || $exitloop){
        if($line eq "__END__"){
                $exitloop = true;
        }
        # Do other stuff here...
}

-----Original Message-----
From: Ronald J Kimball [mailto:[EMAIL PROTECTED]
Sent: Monday, June 16, 2003 11:27 AM
To: Daschbach, John L
Cc: Thomas De Groote; Nicholas G. Thornton; [EMAIL PROTECTED]
Subject: Re: [MacPerl] exiting a while() loop


On Mon, Jun 16, 2003 at 11:19:21AM -0700, Daschbach, John L wrote:
> 
> > > Add an extra variable and set that, like
> > > 
> > > $exitloop = false;
> > > while(<FH> || $exitloop){
> > 
> > What do you suppose happens to the input from <FH> in that line of code?
> 
> It's in $_ as it always is.

Ah ha!  No, it is not.  It is discarded.

In the loop:

while(<FH> || $exitloop) {
}

the input read from <FH> is not assigned to $_, because the implicit
assignment only happens when the input operator is the only thing in the
conditional.

perldoc perlop:

       Ordinarily you must assign the returned value to a vari-
       able, but there is one situation where an automatic
       assignment happens.  If and only if the input symbol is
       the only thing inside the conditional of a "while" state-
       ment (even if disguised as a "for(;;)" loop), the value is
       automatically assigned to the global variable $_, destroy-
       ing whatever was there previously.

Ronald

Reply via email to