``````@array = <A B>;
@array[0,1,2];      # returns 'A', 'B', (Any)
@array[0,1,2] :p;   # returns 0 => 'A', 1 => 'B'
@array[0,1,2] :kv;  # returns 0, 'A', 1, 'B'
@array[0,1,2] :k;   # returns 0, 1
@array[0,1,2] :v;   # returns 'A', 'B'

%hash = (:a<A>, :b<B>);
%hash<a b c>;       # returns 'A', 'B', (Any)
%hash<a b c> :p;    # returns a => 'A', b => 'B'
%hash<a b c> :kv;   # returns 'a', 'A', 'b', 'B'
%hash<a b c> :k;    # returns 'a', 'b'
%hash<a b c> :v;    # returns 'A', 'B'
``````

``````@array[0,1,2] :!p;  # returns 0 => 'A', 1 => 'B', 2 => (Any)
%hash<a b c>  :!kv; # returns 'a', 'A', 'b', 'B', 'c', (Any)
``````

``````my (\$a,\$b,\$c) = %hash<a b c> :delete;
``````

``````1 + (%hash{\$x} :delete);
\$x = (%hash{\$x} :delete);
(\$x) = %hash{\$x} :delete;
``````

``````if %hash<foo> :exists           {...}
if %hash{any <a b c>}  :exists  {...}
if %hash{all <a b c>}  :exists  {...}
if %hash{one <a b c>}  :exists  {...}
if %hash{none <a b c>} :exists  {...}
``````

`:exists` 副词和一组切片结果的布尔值列表结合起来使用，你也可以用类型的语义这样使用：

``````if any %hash<a b c>  :exists {...}
if all %hash<a b c>  :exists {...}
if one %hash<a b c>  :exists {...}
if none %hash<a b c> :exists {...}
``````

## 组合下标副词

`````` %a = %b{@keys-to-extract} :delete :p; # same as :p :delete
``````

``````@actually-deleted = %h{@keys-to-extract} :delete :k; # same as :k :delete
``````

``````:delete :kv            delete, return key/values of actually deleted keys
:delete :!kv           delete, return key/values of all keys attempted
:delete :p             delete, return pairs of actually deleted keys
:delete :!p            delete, return pairs of all keys attempted
:delete :k             delete, return actually deleted keys
:delete :!k            delete, return all keys attempted to delete
:delete :v             delete, return values of actually deleted keys
:delete :!v            delete, return values of all keys attempted
:delete :exists        delete, return Bools indicating keys existed
:delete :!exists       delete, return Bools indicating keys did not exist
:delete :exists :kv    delete, return list with key,True for key existed
:delete :!exists :kv   delete, return list with key,False for key existed
:delete :exists :!kv   delete, return list with key,Bool whether key existed
:delete :!exists :!kv  delete, return list with key,!Bool whether key existed
:delete :exists :p     delete, return pairs with key/True for key existed
:delete :!exists :p    delete, return pairs with key/False for key existed
:delete :exists :!p    delete, return pairs with key/Bool whether key existed
:delete :!exists :!p   delete, return pairs with key/!Bool whether key existed
:exists :kv            return pairs with key,True for key exists
:!exists :kv           return pairs with key,False for key exists
:exists :!kv           return pairs with key,Bool for key exists
:!exists :!kv          return pairs with key,!Bool for key exists
:exists :p             return pairs with key/True for key exists
:!exists :p            return pairs with key/False for key exists
:exists :!p            return pairs with key/Bool for key exists
:!exists :!p           return pairs with key/!Bool for key exists
``````