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'