2010/3/23 Moritz Lenz <mor...@faui2k3.org>:
> Hi,
>
> Hongwen Qiu wrote:
>> Hi, I'm new to Perl6. And just ran the first example in the perl6 book.
>> But, it refused to work. It complains as follows:
>>
>> Too many positional parameters passed; got 2 but expected between 0 and 1
>>
>> I find out that the problem is in the line:
>>
>> my @sorted = @names.sort({ %sets{$_} }).sort({ %games{$_} }).reverse;
>>
>> And I tried eliminate the second sort, or just the parameters in the
>> second sort. In both cases, it works.
>>
>> So, why is this happen? Can it be a bug?
>
> Yes. Thank you for your report.
>
> Rakudo has gone through a major rewrite, and in that process some of the
> features have temporarily disappeared. .sort() with a block accepting
> just one parameter is one of these features.

Actually, as we just determined on #perl6, it works normally, and only
fails under certain conditions -- basically when you get a low-level
collection of things rather than something based on the Perl 6 Seq or
Iterator classes.  So there is a fairly simple workaround:

colomon: rakudo: say (-5...10).sort({.abs}).sort({.abs}).perl
p6eval: rakudo db0f85: OUTPUT«Too many positional parameters passed;
got 2 but expected between 0 and 1␤current instr.: '_block68' pc -1
((unknown file):-1)␤»
colomon: rakudo: say (-5...10).sort({.abs}).Seq.sort({.abs}).perl
p6eval: rakudo db0f85: OUTPUT«(0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5,
6, 7, 8, 9, 10)␤»

That is, adding a .Seq between the two sorts clears up the problem.
That is admittedly a hack, but it is a simple one.

Thanks for reporting the problem!

-- 
Solomon Foster: colo...@gmail.com
HarmonyWare, Inc: http://www.harmonyware.com

Reply via email to