> Though I've no idea what those colons are/are not doing. Those are "colon pairs" (which I've relearned around three times now...):
https://docs.raku.org/language/glossary#index-entry-Colon_Pair Except for this colon: %stash.append: (rocks => @rocks); Which is a short hand for this: %stash.append( (rocks => @rocks) ); As an aside: it's a minor style point, but I think a lot of us overuse that trick-- it saves a character, but the explicit parens are more flexible. Notably this works fine, so here it doesn't even save any characters: %stash.append( :@stuff ); On 3/16/20, 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' > >