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
> --
>

Reply via email to