Sweet!    I added a reverse print to the pile!

<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] }" => @[""] ];

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

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


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

# print in reverse
revoutput(%Smtp4);
</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 =

  FileName =
      Text = Certainly!
   Subject = Stooges
        to = cu...@zoho.com m...@zoho.com
      from = la...@zoho.com
  password = NaYukYukYuk
  username = la...@zoho.com
      port = 465
      smtp = smtps://smtp.zoho.com
DebugTrace = 1

Reply via email to