in reply to Re: Precedence design question...'x' & arith
in thread Precedence design question...'x' & arith

print 'this' . ' ' x $spaces . 'that';
This would function unchanged. Someone else made an erroneous statement about 'x' having higher precedence. It doesn't. It has the same as '*', '/', and '%'. I'm saying -- combine your integers first. So above -- without the need for parents, you can write your 2nd example in 1 statement:
print 'this' . ' ' x $n * rand() + theNumberYouFirstThoughOf() . that' +;

You can't do the above in 1 statement in perl, 'now', but you could if you bumped the **non-combining** string operations down 1 precendence level so you can evaluate the complete numeric expression, and use that as input to your 'x' operand which needs an integer on it's right side. Same holds true for '.' at same precedence as '+' and '-'.

perl -we' print +2-2 . '*' . 2-2 .'='. -4+4-4+4 . '=' 0; ' #current perl: Argument "0*2" isn't numeric in subtraction (-) at -e line 2. Argument "-2=-4" isn't numeric in addition (+) at -e line 2. 2=0 # proposed would give the integer ops higher precedence and get them out of the way of the string-combining parts. Thus: perl -we' print +(2-2) . "*". (2-2) . "=" . (-4+4-4+4) . "=". 0 ."\n"; ' 0*0=0=0
Thus showing the benefit and effect of proper precedence and evaluating the integer ops at higher precedence than the string ops.
∎ (Q.E.D.)?
;-)

Replies are listed 'Best First'.
Re^3: Precedence design question...'x' & arith
by BrowserUk (Patriarch) on Jul 05, 2013 at 20:55 UTC
    You can't do the above in 1 statement in perl, 'now', ...

    Of course you can:

    sub theNumberYouFirstThoughtOf{ 3 };; $n=1; print 'this' . ' ' x ( $n * rand() + theNumberYouFirstThoughtOf() ) . +'that';; this that

    I'm not arguing with your logic. But that's mostly because I cannot see the point in thinking about something that isn't going to change.


    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 requirement was 1 statement w/o parens...sorry, I wasn't clear .. the w/o parens was stated earlier.

      Why wouldn't it change?

      I.e. what possible reason could there be for it not to change? Are you saying Perl is a Dead language? The only languages that do not changes are dead ones -- and nobody uses them except as historical or examples of things not to do...

      Do you think perl is somehow immune to this?

        The requirement was 1 statement w/o parens.

        Why?

        what possible reason could there be for it not to change?

        Why would it? To satisfy your personal and unreasonable requirement to avoid typing two characters in what is in itself, a very infrequently used construct.

        1. 10s or 100s of thousands of programmers have written millions of Perl programs without this ever being an issue worthy of messing with the precedence table.

          Why are you having so much of a problem with it?

        2. In every situation where one might do this, there is a better alternative already existing.

          Eg:

          [0] Perl> printf "%*s\n", $_ *2+4, 'fred' for 1 .. 10;; fred fred fred fred fred fred fred fred fred fred
        Are you saying Perl is a Dead language?

        Certainly not. And throwing straw men into other peoples mouths is a silly tactic.

        Are you saying that this change will suddenly make Perl hip again?

        Will it make PHP, Javascript, Ruby, Java, Go, Dart, ... programmers abandon their current langauges of choice and flock to Perl's door?

        And if they did, would that improve my lot? Or yours?

        Why wouldn't it change?

        Because even if the change of precedence would alleviate a pair of parens in this one situation without affecting existing statements of a similar type -- and I'm far from convinced you've thought that through thoroughly -- how about the knock on affects of that change of precedence upon numbers and strings in other situations; those not using the x operator. Have you even begun to consider how they will affect existing code?

        Unless you're suggesting that the precedence only change for this one specific type of expression -- which would be even sillier.

        I strongly hope that this will be dismissed as an idea very quickly. We've had enough ill-thought through language changes over the last few major versions that have subsequently had to be deprecated. We don't need more of the same for such pointless reasons as avoiding a pair of parens.


        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.
        A reply falls below the community's threshold of quality. You may see it by logging in.