my $p = 'name' => 'Ana';
say $p.key, ' ', $p.value; # name Ana
my $q = :age(30); # colon pair: age => 30
say :verbose, ' ', :!verbose; # verbose => True, verbose => False
my $size = 10; say :$size; # size => 10 (variable name becomes the key)
say :3rd; # rd => 3
say $p.antipair; # Ana => name
10.2 Hashes
my %ages = ana => 30, bo => 25, 'mary jane' => 41;
my %h2 = (:x(1), :y(2));
say %ages<ana>, ' ', %ages{'bo'}, ' ', %ages<mary jane>; # <...> quotes words; <mary jane> is a slice!
say %ages{'mary jane'}; # 41
%ages<cy> = 35;
%ages<bo>:delete; # adverb to delete
say %ages<bo>:exists, ' ', %ages<ana>:exists; # False True
say %ages.elems, ' ', %ages.keys.sort, ' ', %ages.values.sum;
say %ages<ana cy>; # slice: (30 35)
say %ages{'ana', 'cy'}:p; # pairs slice
say %ages.sort(*.value)».key; # sorted by value
for %ages.sort(*.key) -> (:$key, :$value) { say "$key: $value" }
for %ages.kv -> $k, $v { say "$k=$v" }
say %ages.pairs.grep(*.value > 28).Hash;
say %ages.antipairs.Hash; # invert
say %ages.invert; # pairs inverted (handles list values)
my %merged = %ages, cy => 99, dee => 22; # later keys win
say %merged<cy>; # 99
my %count;
%count{$_}++ for <a b a c a>;
say %count; # {a => 3, b => 1, c => 1}
my %default is default(0); # missing keys read as 0
say %default<missing>; # 0
my %nested;
%nested<a><b><c> = 1;
…