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. 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. A function call has higher precedence so $f() is evaluated before the concatenation. Only then is $g() evaluated. Or consider this: $f() ** $g() ** 1 Exponentiation is right associative so C<< $g() ** 1 >> is evaluated first. Function call has higher precedence so $g() is evaluated before exponentiation. Only then is $f() evaluated. The implication is that in any binary operation, the terms are evaluated in order of the associativity of the operation. I don't know if that's guaranteed to be true in the interpreter. If it *is*, then we should add a note to that effect in the perlop paragraph on operator associativity. If *not*, then I wonder why not and what it would take to make it true. The other thing I wonder is whether clarifying precedence of variable terms (including resolution of ties or magic) versus other terms would help resolve the ambiguities in any way, but I haven't really followed that thought through. -- DavidThread Next