Thanks. That's obscure enough that I don't feel too bad about overlooking it. I've spent a lot of time teaching people that Perl is ignores whitespace, except in quotes.
On 5/17/11, Patrick R. Michaud <pmich...@pobox.com> wrote: > On Mon, May 16, 2011 at 03:45:08PM -0400, Parrot Raiser wrote: >> The following piece of trivial code, (drastically simplified from an >> example I was trying to convert), produces different results (3rd >> line) under Perl 5 and Perl 6. (Saved as t_f_int2) >> >> print sqrt (1.5 * 1) ; >> print "\n"; >> print ((1 / 2.7) ** 1); >> print "\n"; >> >> print sqrt (1.5 * 1) * >> ((1 / 2.7) ** 1); >> >> print "\n"; >> [...] >> $>perl6 t_f_int2 >> 1.22474487139159 >> 0.37037037037037 >> 0.74535599249993 >> >> Have I found a bug or merely revealed my ignorance of a change in >> precedence somewhere? > > You've found the difference in how Perl 5 and Perl 6 handles > whitespace+parentheses following a function name. In Perl 5, only > the parenthesized part is passed to C<sqrt>; in Perl 6, the entire > expression will be passed as an argument to the sqrt listop. > > Removing the space between "sqrt" and the parenthesized part will > cause sqrt to act like a normal function on just the value in the > parentheses instead of the full expression: > > $ ./perl6 -e 'say sqrt (1.5 * 1) * ((1 / 2.7) ** 1);' > 0.74535599249993 > $ ./perl6 -e 'say sqrt(1.5 * 1) * ((1 / 2.7) ** 1);' > 0.453609211626514 > > In general, a paren immediately following an identifier is treated > as a function call, while whitespace indicates it's a listop or some > other construct. > > Pm >