---
name: "Declare::Constraints::Simple::Library::Referencial"
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::Referencial"
---

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

Ref Constraints

## NAME

Declare::Constraints::Simple::Library::Referencial - Ref Constraints

## SYNOPSIS

```
  # scalar or array references
  my $scalar_or_array = IsRefType( qw(SCALAR ARRAY) );
  # scalar reference
  my $int_ref = IsScalarRef( IsInt );
  # accept mappings of ids to objects with "name" methods
  my $id_obj_map =
    IsHashRef( -keys   => IsInt,
               -values => And( IsObject,
                               HasMethods('name') ));
  # an integer list
  my $int_list = IsArrayRef( IsInt );
  # accept code references
  my $is_closure = IsCodeRef;
  # accept a regular expression
  my $is_regex = IsRegex;
```

## DESCRIPTION

This library contains those constraints that can test the validity of references and their types.

## CONSTRAINTS

### IsRefType(@types)

Valid if the value is a reference of a kind in `@types`.

### IsScalarRef($constraint)

This is true if the value is a scalar reference. A possible constraint for the scalar references target value can be passed. E.g.

```
  my $test_integer_ref = IsScalarRef(IsInt);
```

### IsArrayRef($constraint)

The value is valid if the value is an array reference. The contents of the array can be validated by passing another `$constraint` as argument.

The stack or path part of `"IsArrayRef"` is `"IsArrayRef[$index]"` where `$index` is the index of the failing element.

### IsHashRef(-keys =\> $constraint, -values =\> $constraint)

True if the value is a hash reference. It can also take two named parameters: `"-keys"` can pass a constraint to check the hashes keys, `"-values"` does the same for its values.

The stack or path part of `"IsHashRef"` looks like  `"IsHashRef[$type $key]"` where `$type` is either `"val"` or `"key"`  depending on what was validated, and `$key` being the key that didn't  pass validation.

### IsCodeRef()

Code references have to be valid to pass this constraint.

### IsRegex()

True if the value is a regular expression built with `"qr"`. **Note** however, that a simple string that could be used like `"/$rx/"` will not pass this constraint. You can combine multiple constraints with And(@constraints) though.

## 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.
