My reply to Joseph went off the list too. I copy it over here. Here is the key 
quote from Joseph's email I was answering to:

So doing that with append would be like this:

 %stash.append: (:greek(@greek));

William Michels was wondering if there was a way to avoid
repeating the name twice, speculating that there might be
some way to do that with a 'whateva' *.

My answer follows:

Ok, clear enough. This is as simple as:

%stash.append: (:@greek);

Roughly, colon op doesn't care about sigils and twigils. It takes a symbol and 
creates a pair with the key of the symbol. A good example with a bit of Raku 
charm:

class Foo { 
    has @.attr = <a b c>; 
    method foo { %(:@.attr) } 
}
say Foo.new.foo; # {attr => [a b c]}

Best regards,
Vadim Belman

> On Mar 16, 2020, at 6:44 PM, Andy Bach <andy_b...@wiwb.uscourts.gov> wrote:
> 
> Vadim clarified for us, off-list:
> > So, you basically needed:
> my %h = :a(1); %h.append: (:b(2));
> 
> > Am I correct?
> I think so, I mean, I believe the append method(?) for hashes would solve the 
> problem the "whatever star" was attempted to be used for - so:
>>>> > my @monsters = << godzilla grendel wormface blob fingfangfoom tingler >>;
>>>> [godzilla grendel wormface blob fingfangfoom tingler]
>>>> > my @rocks = << marble sandstone granite chert pumice limestone >>
>>>> [marble sandstone granite chert pumice limestone]
>>>> > my  %stash = monsters => @monsters
>>>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>>>> >  %stash.append: (:rocks(@rocks));
>>>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler], rocks 
>>>> => [marble sandstone granite chert pumice limestone]}
>>>> Or:
>>>> > my  %stash = monsters => @monsters
>>>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>>>> > %stash.append: (:rocks => @rocks);
>>>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler], rocks 
>>>> True => [marble sandstone granite chert pumice limestone]}
>>>> Or:
>>>> > my  %stash = monsters => @monsters
>>>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>>>> > %stash.append: (rocks => @rocks);
>>>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler], rocks 
>>>> => [marble sandstone granite chert pumice limestone]}
>>>> 
> Though I've no idea what those colons are/are not doing.  And we can get to 
> those "inner" array elements via
> > say %stash<rocks>[1]
> sandstone
> 
> 
> 
> From: Vadim Belman <vr...@lflat.org>
> Sent: Friday, March 13, 2020 12:50 PM
> To: Andy Bach <andy_b...@wiwb.uscourts.gov>
> Cc: William Michels via perl6-users <perl6-users@perl.org>; Joseph Brenner 
> <doom...@gmail.com>; Timo Paulssen <t...@wakelift.de>; yary 
> <not....@gmail.com>
> Subject: Re: stashing an array in a hash and yanking it back out
>  
> 
> There is no mystery whatsoever.
> 
> Consider the following:
> 
> my %h = "a", 1; # {a => 1}
> 
> Then consider this:
> 
> say *, *; # **
> 
> 
> and also:
> 
> say *.VAR.WHAT; # (Whatever)
> 
> Taking into account that => has tighter precedence than , what you get in:
> 
> my %h = *, a => [1,2,3];
> 
> is actually the following data structure:
> 
> %( Whatever => Pair )
> 
> Regarding your use of postcircumfix [ ] on the data, you use it on Pair.
> 
> Best regards,
> Vadim Belman 
> 
>> On Mar 13, 2020, at 11:52 AM, Andy Bach <andy_b...@wiwb.uscourts.gov 
>> <mailto:andy_b...@wiwb.uscourts.gov>> wrote:
>> 
>> > my  %stash = monsters => @monsters, rocks => @rocks
>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler], rocks => 
>> [marble sandstone granite chert pumice limestone]}
>> > my @more_rocks = << marble sandstone granite chert pumice limestone >>
>> [marble sandstone granite chert pumice limestone]
>> > my  %stash = *, morerocks => @rocks
>> {* => morerocks => [marble sandstone granite chert pumice limestone]}
>> > say %stash{*}
>> (morerocks => [marble sandstone granite chert pumice limestone])
>> 
>> So, I'm guessing the display
>> {* => morerocks => [marble sandstone granite chert pumice limestone]}
>> 
>> really means something like
>> {* => (morerocks => [marble sandstone granite chert pumice limestone])}
>> 
>> maybe?
>> > say @(%stash{*})
>> (morerocks => [marble sandstone granite chert pumice limestone])
>> > say @(%stash{*}).[0]
>> morerocks => [marble sandstone granite chert pumice limestone]
>> > say @(%stash{*}).[1]
>> Nil
>> > say @(%stash{*}).[0].{morerocks}
>> ===SORRY!=== Error while compiling:
>> Undeclared routine:
>>     morerocks used at line 1
>> 
>> > say @(%stash{*}).[0].[0]
>> morerocks => [marble sandstone granite chert pumice limestone]
>> > say @(%stash{*}).[0].[1]
>> Index out of range. Is: 1, should be in 0..0
>>   in block <unit> at <unknown file> line 1
>> 
>> > say @(%stash{*}).[0].[0].perl
>> :morerocks(["marble", "sandstone", "granite", "chert", "pumice", 
>> "limestone"])
>> > say @(%stash{*}).[0].perl
>> :morerocks(["marble", "sandstone", "granite", "chert", "pumice", 
>> "limestone"])
>> 
>> 
>> I dunno.
>> 
>> From: William Michels via perl6-users <perl6-users@perl.org 
>> <mailto:perl6-users@perl.org>>
>> Sent: Thursday, March 12, 2020 5:44 PM
>> To: perl6-users <perl6-users@perl.org <mailto:perl6-users@perl.org>>
>> Cc: Joseph Brenner <doom...@gmail.com <mailto:doom...@gmail.com>>; Timo 
>> Paulssen <t...@wakelift.de <mailto:t...@wakelift.de>>; yary 
>> <not....@gmail.com <mailto:not....@gmail.com>>
>> Subject: Re: stashing an array in a hash and yanking it back out
>>  
>> Thanks yary! The code you posted works perfectly.
>> 
>> Okay, one last question. I tried to use the 'DRY' principle to add
>> things to a hash. However, (thinking that a 'whatever star' might
>> reduce typing), I came up with an odd "ternary" structure. Can anyone
>> explain the last line of code, below?
>> 
>> mbook:~ homedir$ perl6
>> To exit type 'exit' or '^D'
>> > my @monsters = << godzilla grendel wormface blob fingfangfoom tingler >>;
>> [godzilla grendel wormface blob fingfangfoom tingler]
>> > my @rocks = << marble sandstone granite chert pumice limestone >>
>> [marble sandstone granite chert pumice limestone]
>> > my  %stash = monsters => @monsters
>> {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>> > my %stash = *, rocks => @rocks;
>> {* => rocks => [marble sandstone granite chert pumice limestone]}
>> 
>> Thanks, Bill.
>> 
>> 
>> On Wed, Mar 11, 2020 at 9:06 PM yary <not....@gmail.com 
>> <mailto:not....@gmail.com>> wrote:
>> >
>> > The fat-arrow example makes sense, what this says
>> > %stash = rocks => @rocks
>> > is "replace %stash in its entirety with key rocks gets value @rocks"
>> > anything that used to be in %stash doesn't matter because this assignment 
>> > (left side) is the entirety of %stash
>> >
>> > what this says
>> > %stash{'rocks'} = @rocks
>> > is "replace the slot 'rocks' in %stash with @rocks"
>> > This assignment only is for the 'rocks' element of %stash so the other 
>> > elements remain unchanged.
>> >
>> > Extending the examples, first 3 lines are unchanged from before
>> >
>> > > my @monsters = << godzilla grendel wormface blob fingfangfoom tingler >>;
>> > [godzilla grendel wormface blob fingfangfoom tingler]
>> > > my @rocks = << marble sandstone granite chert pumice limestone >>
>> > [marble sandstone granite chert pumice limestone]
>> > > my  %stash = monsters => @monsters
>> > {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>> >
>> > > %stash = %stash, rocks => @rocks
>> > {monsters => [godzilla grendel wormface blob fingfangfoom tingler], rocks 
>> > => [marble sandstone granite chert pumice limestone]}
>> > > my %together = monsters => @monsters, rocks => @rocks
>> > {monsters => [godzilla grendel wormface blob fingfangfoom tingler], rocks 
>> > => [marble sandstone granite chert pumice limestone]}
>> >
>> >
>> > -y
>> >
>> >
>> > On Tue, Mar 10, 2020 at 1:12 PM William Michels via perl6-users 
>> > <perl6-users@perl.org <mailto:perl6-users@perl.org>> wrote:
>> >>
>> >> Hi Joe,
>> >>
>> >> So I had a chance to play with hashes further, and I noticed something
>> >> that you might be interested in. It seems that 'bare' declaration of a
>> >> hash with a "my" lexical scope enables you to stash away multiple
>> >> 'hash' elements at the top level using a 'curly brace' syntax. However
>> >> using the 'fat arrow' syntax will overwrite any previously stashed
>> >> 'top level' hash elements.
>> >>
>> >> Hopefully the REPL code below illustrates. First, 'curly brace' syntax:
>> >>
>> >> mbook:~ homedir$ perl6
>> >> To exit type 'exit' or '^D'
>> >> > my @monsters = << godzilla grendel wormface blob fingfangfoom tingler 
>> >> > >>;
>> >> [godzilla grendel wormface blob fingfangfoom tingler]
>> >> > my @rocks = << marble sandstone granite chert pumice limestone >>
>> >> [marble sandstone granite chert pumice limestone]
>> >> > my %stash
>> >> {}
>> >> > %stash{'monsters'} = @monsters
>> >> [godzilla grendel wormface blob fingfangfoom tingler]
>> >> > say %stash
>> >> {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>> >> > %stash{'rocks'} = @rocks
>> >> [marble sandstone granite chert pumice limestone]
>> >> > say %stash
>> >> {monsters => [godzilla grendel wormface blob fingfangfoom tingler],
>> >> rocks => [marble sandstone granite chert pumice limestone]}
>> >> > exit
>> >> mbook:~ homedir$
>> >>
>> >> [and now try 'fat arrow' syntax]
>> >>
>> >> mbook:~ homedir$ perl6
>> >> To exit type 'exit' or '^D'
>> >> > my @monsters = << godzilla grendel wormface blob fingfangfoom tingler 
>> >> > >>;
>> >> [godzilla grendel wormface blob fingfangfoom tingler]
>> >> > my @rocks = << marble sandstone granite chert pumice limestone >>
>> >> [marble sandstone granite chert pumice limestone]
>> >> > my %stash
>> >> {}
>> >> > %stash = monsters => @monsters
>> >> {monsters => [godzilla grendel wormface blob fingfangfoom tingler]}
>> >> > %stash = rocks => @rocks
>> >> {rocks => [marble sandstone granite chert pumice limestone]}
>> >> > say %stash
>> >> {rocks => [marble sandstone granite chert pumice limestone]}
>> >> > say %stash<monsters>
>> >> (Any)
>> >> > exit
>> >> mbook:~ homedir$ perl6 -v
>> >> This is Rakudo version 2019.07.1 built on MoarVM version 2019.07.1
>> >> implementing Perl 6.d.
>> >>
>> >> HTH, Bill.
>> >>
>> >>
>> >>
>> >> On Thu, Mar 5, 2020 at 6:10 PM Joseph Brenner <doom...@gmail.com 
>> >> <mailto:doom...@gmail.com>> wrote:
>> >> >
>> >> > William Michels <w...@caa.columbia.edu <mailto:w...@caa.columbia.edu>> 
>> >> > wrote:
>> >> >
>> >> > > Yes, since I was working in the REPL, I tried compacting Joe's code by
>> >> > > eliminating the "my %stash" line at the top, and adding "my" to the 
>> >> > > third
>> >> > > line.
>> >> >
>> >> > I noticed the additional "my" in there, but I wouldn't have been able
>> >> > to tell you why it was behaving like it was...
>> >> >
>> >> > On the plus side, I see that if you tried to do that in a script, it
>> >> > would warn you:
>> >> >
>> >> >     Potential difficulties:
>> >> >        Redeclaration of symbol '%stash'

Reply via email to