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> 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> wrote:
> >
> > William Michels <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