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-us...@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-us...@perl.org >> <mailto:perl6-us...@perl.org>> >> Sent: Thursday, March 12, 2020 5:44 PM >> To: perl6-users <perl6-us...@perl.org <mailto:perl6-us...@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-us...@perl.org <mailto:perl6-us...@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'