---
name: "Declare::Constraints::Simple::Library::Hash"
section: "3pm"
platform: "linux"
package: "libdeclare-constraints-simple-perl"
version: "0.03-1.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Declare::Constraints::Simple::Library::Hash"
---

# Declare::Constraints::Simple::Library::Hash(3pm)

Hash Constraints

## NAME

Declare::Constraints::Simple::Library::Hash - Hash Constraints

## SYNOPSIS

```
  my $constraint = And(
    # make sure all keys are present
    HasAllKeys( qw(foo bar) ),
    # constraints for the keys
    OnHashKeys( foo => IsInt, bar => HasLength )
  );
```

## DESCRIPTION

This module contains all constraints that can be applied to hash references.

### HasAllKeys(@keys)

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 =\> $constraint, key =\> $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 don't have to check for `"IsHashRef"` validity here. The hash constraints are already doing that by themselves.

The stack or path part of `"OnHashKeys"` looks like `"OnHashKeys[$key]"` where `$key` is the key of the failing value.

## SEE ALSO

Declare::Constraints::Simple, Declare::Constraints::Simple::Library

## AUTHOR

Robert 'phaylon' Sedlacek `"<phaylon@dunkelheit.at>"`

## LICENSE AND COPYRIGHT

This module is free software, you can redistribute it and/or modify it  under the same terms as perl itself.
