http://www.perlmonks.org?node_id=943942


in reply to Re^2: Surprised by Perl parse of ternary operator
in thread Surprised by Perl parse of ternary operator

bend the rules differently.

I wouldn't exactly call it "bending the rules". For perl or the other two.

I read it that perl uses a minimal munch approach at that point of the syntax and hence sees:

( ( $fred == 42) ? ( $config = 'k1') : ( $config ) ) = 'k2';

Whereas the other two use a maximal munch approach and so see:

( $fred == 42 ) ? ( $config = 'k1' ) : ( $config = 'k2' );

I think the use case for Perl's way is using the ternary as the lvalue target of assignment. Something like:

$lo = $hi = 0; $x = 7; $mid = 5; $x < $mid ? $lo : $hi = $x; print "lo:$lo hi:$hi";; lo:0 hi:7

Can Ruby or PHP do that?


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

The start of some sanity?

Replies are listed 'Best First'.
Re^4: Surprised by Perl parse of ternary operator
by Anonymous Monk on Dec 16, 2011 at 15:32 UTC

    Can Ruby or PHP do that?

    No, at least Ruby seems to lack a concept of a "variable" lvalue. (foo = bar) = 5 gives a syntax error, and x < mid ? lo : hi = x gets parsed as x < mid ? lo : (hi = x)