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 an other $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.