Thanks, your script enticed me to explore different ways of
constructing a hash table. I dimly recall something about map having
access to an index variable, but couldn't find it documented so maybe
I was dreaming. The process of figuring out these approaches
highlighted that so much perl6 documentation on the web is outdated. I
guess what the perl6.org site needs is more examples. Rosettacode was
also useful.

#!/usr/bin/env perl6

#`{
  Hashes do not print in the order they are created.  it is a Perl 6 thing.
  To overcome this, create an index of the hash.
}

my @SmtpIndex =
   qw[ DebugTrace smtp port username password from to Subject Text FileName ];

my %Smtp =
  [ "{ @SmtpIndex[0] }" => "1",
    "{ @SmtpIndex[1] }" => "smtps://smtp.zoho.com",
    "{ @SmtpIndex[2] }" => "465",
    "{ @SmtpIndex[3] }" => 'la...@zoho.com',
    "{ @SmtpIndex[4] }" => "NaYukYukYuk",
    "{ @SmtpIndex[5] }" => 'la...@zoho.com',
    "{ @SmtpIndex[6] }" => @['cu...@zoho.com','m...@zoho.com'],
    "{ @SmtpIndex[7] }" => "Stooges",
    "{ @SmtpIndex[8] }" => "Certainly!",
    "{ @SmtpIndex[9] }" => @[""] ];

sub output(%hash, @index=@SmtpIndex) {
    for @index -> $key {
        printf "%10s = %s\n", $key, %hash{$key};
    }
}

my @SmtpValues = %Smtp{@SmtpIndex};

my %Smtp2 = do {
    my $index = 0;
    @SmtpValues.map: { "{ @SmtpIndex[$index++] }" => $_ };
};

my %Smtp3 = gather for 0..@SmtpIndex.elems-1 {
    take @SmtpIndex[$_] => @SmtpValues[$_].Str;
};

my %Smtp4 = @SmtpIndex Z=> @SmtpValues;

# These are all equivalent
# output(%Smtp);
# output(%Smtp2);
# output(%Smtp3);
output(%Smtp4);


On 3 October 2017 at 07:23, ToddAndMargo <toddandma...@zoho.com> wrote:
> Hi All,
>
> I created a keeper not on hash indexing.  I though
> maybe you guys would find it interesting, if for nothing
> else, for the syntax used
>
> -T
>
>
> Perl6: Indexing a hash:
>
> <code>
> #!/usr/bin/env perl6
>
> #`{
>   Hashes do not print in the order they are created.  it is a Perl 6 thing.
>   To overcome this, create an index of the hash.
> }
>
> my @SmtpIndex =
>    qw[ DebugTrace smtp port username password from to Subject Text FileName
> ];
>
> my %Smtp =
>   [ "{ @SmtpIndex[0] }" => "1",
>     "{ @SmtpIndex[1] }" => "smtps://smtp.zoho.com",
>     "{ @SmtpIndex[2] }" => "465",
>     "{ @SmtpIndex[3] }" => 'la...@zoho.com',
>     "{ @SmtpIndex[4] }" => "NaYukYukYuk",
>     "{ @SmtpIndex[5] }" => 'la...@zoho.com',
>     "{ @SmtpIndex[6] }" => @['cu...@zoho.com','m...@zoho.com'],
>     "{ @SmtpIndex[7] }" => "Stooges",
>     "{ @SmtpIndex[8] }" => "Certainly!",
>     "{ @SmtpIndex[9] }" => @[""] ];
>
> for @SmtpIndex -> $key { printf "%10s = %s\n", "$key", "%Smtp{$key}"; }
> </code>
>
>
> $ HashIndexTest.pl6
> DebugTrace = 1
>       smtp = smtps://smtp.zoho.com
>       port = 465
>   username = la...@zoho.com
>   password = NaYukYukYuk
>       from = la...@zoho.com
>         to = cu...@zoho.com m...@zoho.com
>    Subject = Stooges
>       Text = Certainly!
>   FileName =

Reply via email to