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
>

Reply via email to