There have been some relevant changes since this ticket was created: 1 postcircumfix:<{ }> is a sub now.
2 There was a change to the design documents and according to S02 the adverbial forms :p, :kv, :k, :v "weed out non-existing entries if the adverb is true; if not, they leave them in, just as an ordinary slice would" (cmp. https://github.com/perl6/specs/commit/fd94c28225). Taking these changes into account, now the mentioned commands run as expected. First the :p(0) stuff: $ perl6 -e 'my %h; %h<a>=1; say %h<a>:p' "a" => 1 $ perl6 -e 'my %h; %h<a>=1; say %h<a>:p(0)' ## same result since key "a" exists "a" => 1 $ perl6 -e 'my %h; %h<a>=1; say %h<a>:!p' ## same thing "a" => 1 $ perl6 -e 'my %h; %h<a>=1; say %h<b>:p' ## key "b" does not exist $ perl6 -e 'my %h; %h<a>=1; say %h<b>:p(0)' ## pair not weeded out "b" => Any $ perl6 -e 'my %h; %h<a>=1; say %h<b>:!p' ## same thing "b" => Any The adverbs :delete and :exists also work as designed: $ perl6 -e 'my %h; %h<a>=1; say %h<a>:delete; say %h' 1 $ perl6 -e 'my %h; %h<a>=1; say %h<a>:delete(0); say %h' 1 "a" => 1 $ perl6 -e 'my %h; %h<a>=1; say %h<a>:exists' True $ perl6 -e 'my %h; %h<a>=1; say %h<a>:exists(0)' False For :p(0) I added tests to S32-hash/pairs.t with commit https://github.com/perl6/roast/commit/a543b07ab4 For :delete(0) and :exists(0) there are passing tests in S32-hash/delete-adverb.t and S32-exists-adverb.t, respectively. I'm closing this ticket now.