yes. using '&&', 'last' is always evaluated. it is using 'and' that works, because it has lower precedence than comma. so it parses as ($x eq 'a') and ( (print 'a'), last); which is what i want. i didn't know there was difference between 'and' and '&&'. that is a bit of a gotcha for newbots.
On Thursday, March 14, 2002, at 11:03 AM, Michael Fowler wrote: > On Thu, Mar 14, 2002 at 10:32:56AM -0800, bob ackerman wrote: >> confusion i have with comma operator. >> docs seem to indicate it evaluates both sides, but i see examples where >> it >> looks like if it evaluates to false on LHS it doesn't evaluate RHS. i see >> this in examples of writing a case statement. >> $x='b'; >> { >> ($x eq 'a') && (print 'a'), last; >> print 'x'; >> } > >> i see it work sortof sometimes - if $x isn't equal 'a', 'last' isn't >> evaulated and it prints 'x'. >> shouldn't it also evaluate 'last', whether the LHS of that line is true >> or >> not? > > I'm not sure why you're seeing this result. last is always evaluated > here: > > Given $x = "a", you should see just an "a" printed. Given $x = "b" you > should see nothing printed. Are you certain you didn't introduce an > error? > If you have a version of code that's printing the 'x' please paste it, > along > with your usage of it to show it's printing the 'x'. > > The expression "($x eq 'a') && (print 'a'), last" is equivalent to "(($x > eq > 'a') && (print 'a')), last". The last is evaluated regardless of of the > truth of the test. The expression (as you point out in a later > email) "($x > eq 'a') and (print 'a'), last" is equivalent to "($x eq 'a') and ((print > 'a', last)" because of the precedence of the and operator; the comma, and > the last, are only reached if the test is true. > > It might help if you used the Deparse module like so: > > perl -MO=Deparse -wle '$x = "b"; { ($x eq "a") and (print "a"), last; > print "x"; }' > > Notice that this has nothing to do with how the comma evaluates its > arguments, but when the branch with the comma in it is reached. > > > Michael > -- > Administrator www.shoebox.net > Programmer, System Administrator www.gallanttech.com > -- >