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.

Reply via email to