develooper Front page | perl.perl5.porters | Postings from July 2010

Re: Order of evaluation of terms (was peephole optimiser could prune more dead code)

Thread Previous | Thread Next
From:
Eric Brine
Date:
July 15, 2010 08:52
Subject:
Re: Order of evaluation of terms (was peephole optimiser could prune more dead code)
Message ID:
AANLkTikNWp7G4-62psxg_2Gn-mfyrbsr07afxCCv9ONe@mail.gmail.com
On Thu, Jul 15, 2010 at 10:06 AM, David Golden <xdaveg@gmail.com> wrote:

> On Thu, Jul 15, 2010 at 9:33 AM, demerphq <demerphq@gmail.com> wrote:
> >> On the other hand, it may not be documented or specified, but I think
> most
> >> people would expect that in the following, f() is called before g():
> >>    $f() . $g()
> >
> > Hmm. I don't know that I would. If we want this to be the case then
> > IMO we should document it.
>
> I thought this was actually specified in terms of precedence and
> associativity, but if I read it narrowly as written, it's not.  At
> best it's implied.
>

Operand evaluation order is only specified for some operators. It's has
nothing to do with precedence or associativity (which is a tie breaker for
precedence).

Off the top of my head, it is documented for logical operators (to allow
short circuiting), comma operator (to allow it to be used as a semi-colon)
and the flip-flop operator. I also consider it defined for assignment
operators (otherwise local $foo = $foo; wouldn't work) and for =~,

But maybe we can get there by analogy with some identity operations.
> Consider this:
>
>    q{} . $f() . $g()
>
> Concatenation is left associative so C<< q{} . $f() >> is evaluated
> first.


So the left "." is evaluated first, but the following does not contradict
the docs:

$ST[0] = g();
$ST[1] = f();
$ST[2] = q{};
$ST[1] = $ST[2] . $ST[1]  # left dot
$ST[0] = $ST[1] . $ST[0]  # right dot


A function call has higher precedence so $f() is evaluated
> before the concatenation.
>

Functions calls are not on the precedence table. They are considered terms
(not operators) at the grammar level.

- Eric

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About