> On Apr 20, 2021, at 12:39 AM, Norman Gaywood <[email protected]> wrote:
>
> Hi, I can't figure out why the last line here is failing.
> Version 2020.07
>
> $ raku
> To exit type 'exit' or '^D'
> > my %h = gather { take "foo"=>1; take "bar"=>2;}
> {bar => 2, foo => 1}
> > my %h = gather { take "foo"=>1}
> {foo => 1}
> > my %h = gather { take eager "foo"=>1; take "bar"=>2;}
> {foo 1 => bar => 2}
> > my %h = gather { take eager "foo"=>1}
> Odd number of elements found where hash initializer expected:
> Only saw: $(:foo(1),)
> in block <unit> at <unknown file> line 1
—snip—
Whenever I get that hash assignment 'Odd number of elements' error in Perl or
Raku,
I gain clarity by replacing the hash with an array, and inspecting the array.
> my @a = gather { take "foo"=>1; take "bar"=>2; }; say .raku ~ ' is a '
> ~ .WHAT.gist for @a;
:foo(1) is a (Pair)
:bar(2) is a (Pair)
> my @a = gather { take "foo"=>1 }; say .raku ~ ' is a '
> ~ .WHAT.gist for @a;
:foo(1) is a (Pair)
> my @a = gather { take eager "foo"=>1; take "bar"=>2; }; say .raku ~ ' is a '
> ~ .WHAT.gist for @a;
$(:foo(1),) is a (List)
:bar(2) is a (Pair)
> my @a = gather { take eager "foo"=>1 }; say .raku ~ ' is a '
> ~ .WHAT.gist for @a;
$(:foo(1),) is a (List)
This does not address why `eager` is changing the pair constructor,
but it simplifies future discussion,
and also shows that while only #4 of the OP REPL samples was throwing the
error,
#3 is actually also not producing what was desired.
--
Hope this helps,
Bruce Gray (Util of PerlMonks)