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

Reply via email to