Mostly Harmless Docs/Nested Data Structures
#!/usr/bin/env perl6
my %users =
'alice' => {
'email' => 'alice@example.com',
'pwd' => 's3cr3t',
'aliases' => ['al', 'allie', 'alster']},
'bob' => {
'email' => 'bob@example.com',
'pwd' => 'abc123',
'aliases' => ['bob-o', 'Mr. Bob']},
'charlie' => {
'email' => 'charlie@example.com',
'pwd' => 'dog',
'aliases' => ['Chaz', 'C-ward']};
# Change charlie's password to "change-me".
say "Old password: %users<charlie><pwd>";
%users<charlie><pwd> = 'change-me';
say "New password: %users<charlie><pwd>";
# Add alias "Robert" for bob.
say "bob's aliases: %users<bob><aliases>";
%users<bob><aliases>.push('Robert');
say "bob's aliases: %users<bob><aliases>";
say '-' x 42;
# Print out all user info.
for %users.keys -> $name {
for %users{$name}.kv -> $k, $v {
if $k ~~ 'aliases' {
say "$k:";
# Print out aliases, one per line.
for $v.values -> $alias {
say "\t$alias";
}
}
else {
say "$k:\t$v";
}
}
}
Note how the square brackets are used for creating a list that doesn’t flatten.
Also, when we want to iterate over the values in $v (Control Structures are covered later), we use $v.values. Another option is to use @$v or @($v).
