The value has to be a hashref, and contain all keys listed in
@keys to pass this constraint.
The stack or path part of HasAllKeys is HasAllKeys[$key] where
$key is the missing key.
OnHashKeys(key => CW$constraint, key => CW$constraint, ...)
This allows you to pass a constraint for each specific key in
a hash reference. If a specified key is not in the validated
hash reference, the validation for this key is not done. To make
a key a requirement, use HasAllKeys(@keys) above in combination
with this, e.g. like:
And( HasAllKeys( qw(foo bar baz) )
OnHashKeys( foo => IsInt,
bar => Matches(qr/bar/),
baz => IsArrayRef( HasLength )));
Also, as you might see, you dont have to check for IsHashRef
validity here. The hash constraints are already doing that by
The stack or path part of OnHashKeys looks like OnHashKeys[$key]
where $key is the key of the failing value.