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> 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