Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re^3: Surprised by Perl parse of ternary operator

by BrowserUk (Pope)
on Dec 16, 2011 at 13:18 UTC ( #943942=note: print w/replies, xml ) Need Help??

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)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://943942]
[jdporter]: emerods?

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2017-08-21 22:34 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (325 votes). Check out past polls.