Thanks, this is indeed the trick: > Ok, clear enough. This is as simple as:
> %stash.append: (:@greek); On 3/17/20, Vadim Belman <vr...@lflat.org> wrote: > 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' > >