That may work, but is bad practice.
Instead of:
%Vendors<< $x >><ContactName>
, please use:
%Vendors{$x}<ContactName>
The relation of `<<…>>` is to `<…>` as double-quotes are to single-quotes;
doubling up changes from non-interpolating to interpolating.
To say `%Vendors<< $x >>` is to take the shortcut intended for constant keys,
and bludgeon it to make it support variable keys, when the basic (and shorter)
syntax of `%Vendors{$x}` handles the variable key naturally.
—
Hope this helps,
Bruce Gray (Util of PerlMonks)
> On Jan 11, 2019, at 1:50 PM, ToddAndMargo via perl6-users
> <[email protected]> wrote:
>
> On 1/11/19 11:43 AM, ToddAndMargo via perl6-users wrote:
>> On 1/11/19 11:39 AM, ToddAndMargo via perl6-users wrote:
>>> On 1/11/19 11:33 AM, JJ Merelo wrote:
>>>> I think you want $x, not $Ace.
>>>>
>>>> Cheers
>>>
>>> Yup. I am on fire today! :'(
>>>
>>> Still can't get it figured out. :'( :'(
>>>
>>> $ p6 'my $x="Ace"; my %Vendors=("acme" => { "ContactName" => "Larry",
>>> "AccountNo" => 1234 }, "Ace" => { "ContactName" => "Mo", "AccountNo" =>
>>> "A102" } ); say "%Vendors<$x><ContactName>" ~ "\t" ~
>>> "%Vendors<$x><AccountNo>";'
>>> Use of uninitialized value of type Any in string context.
>>>
>>>
>>> $ p6 'my $x="Ace"; my %Vendors=("acme" => { "ContactName" => "Larry",
>>> "AccountNo" => 1234 }, "Ace" => { "ContactName" => "Mo", "AccountNo" =>
>>> "A102" } ); say "%Vendors<"$x"><ContactName>" ~ "\t" ~
>>> "%Vendors<"$x"><AccountNo>";'
>>> Use of uninitialized value of type Any in string context.
>>>
>>> $ p6 'my $x="Ace"; my %Vendors=("acme" => { "ContactName" => "Larry",
>>> "AccountNo" => 1234 }, "Ace" => { "ContactName" => "Mo", "AccountNo" =>
>>> "A102" } ); say "%Vendors<{$x}><ContactName>" ~ "\t" ~
>>> "%Vendors<{$x}><AccountNo>";'
>>> Use of uninitialized value of type Any in string context.
>>>
>>> $ p6 'my $x="Ace"; my %Vendors=("acme" => { "ContactName" => "Larry",
>>> "AccountNo" => 1234 }, "Ace" => { "ContactName" => "Mo", "AccountNo" =>
>>> "A102" } ); say "%Vendors<{"$x"}><ContactName>" ~ "\t" ~
>>> "%Vendors<{"$x"}><AccountNo>";'
>>> Use of uninitialized value of type Any in string context.
>>>
>>>
>>> I can't win.
>> $ p6 'my $x="Ace"; my %Vendors=("acme" => { "ContactName" => "Larry",
>> "AccountNo" => 1234 }, "Ace" => { "ContactName" => "Mo", "AccountNo" =>
>> "A102" } ); say "%Vendors<<$x>><ContactName>" ~ "\t" ~
>> "%Vendors<<$x>><AccountNo>";'
>> ===SORRY!===
>> Unable to parse expression in double quotes; couldn't find final '"'
>> (corresponding starter was at line 1)
>> at -e:1
>> ------> >" ~ "\t" ~ "%Vendors<<$x>><AccountNo>";⏏<EOL>
>> expecting any of:
>> double quotes
>> postfix
>> Other potential difficulties:
>> Ambiguous use of >>; use » instead to mean hyper, or insert whitespace
>> before >> to mean a quote terminator (or use different delimiters?)
>> at -e:1
>> ------> 2" } ); say "%Vendors<<$x>><ContactName>⏏" ~ "\t" ~
>> "%Vendors<<$x>><AccountNo>";
>> Ambiguous use of >>; use » instead to mean hyper, or insert whitespace
>> before >> to mean a quote terminator (or use different delimiters?)
>> at -e:1
>> ------> me>" ~ "\t" ~ "%Vendors<<$x>><AccountNo>⏏";
>
>
> I got it finally. I had to switch from a one liner to an actual program
>
>
> <code HashOfHashTest.pl6>
> #! /usr/bin/env perl6
>
> my $x = "Ace";
> my %Vendors = ( "acme" => { "ContactName" => "Larry", "AccountNo" => 1234 },
> "Ace" => { "ContactName" => "Mo", "AccountNo" => "A102" }
> );
>
> print( %Vendors<< $x >><ContactName> ~ "\t" ~ %Vendors<< $x >><AccountNo> ~
> "\n" );
> <M/code>
>
>
> $ HashOfHashTest.pl6
> Mo A102
>
> And it demanded a white space in << $x >>