Attribute::Params::Validate - Define validation through subroutine attributes

- NAME
- VERSION
- SYNOPSIS
- DESCRIPTION
  - EXPORT
  - ATTRIBUTES
  - OO
  - CAVEATS
- SEE ALSO
- AUTHORS
- COPYRIGHT AND LICENSE

# NAME

Attribute::Params::Validate - Define validation through subroutine attributes

# VERSION

version 1.20

# SYNOPSIS

      use Attribute::Params::Validate qw(:all);

      # takes named params (hash or hashref)
      # foo is mandatory, bar is optional
      sub foo : Validate( foo => 1, bar => 0 )
      {
          # insert code here
      }

      # takes positional params
      # first two are mandatory, third is optional
      sub bar : ValidatePos( 1, 1, 0 )
      {
          # insert code here
      }

      # for some reason Perl insists that the entire attribute be on one line
      sub foo2 : Validate( foo => { type => ARRAYREF }, bar => { can => [ 'print', 'flush', 'frobnicate' ] }, baz => { type => SCALAR, callbacks => { 'numbers only' => sub { shift() =~ /^\d+$/ }, 'less than 90' => sub { shift() < 90 } } } )
      {
          # insert code here
      }

      # note that this is marked as a method.  This is very important!
      sub baz : Validate( foo => { type => ARRAYREF }, bar => { isa => 'Frobnicator' } ) method
      {
          # insert code here
      }

# DESCRIPTION

The Attribute::Params::Validate module allows you to validate method or function call parameters just like Params::Validate does. However, this module allows you to specify your validation spec as an attribute, rather than by calling the `validate` routine.

Please see Params::Validate for more information on how you can specify what validation is performed.

## EXPORT

This module exports everything that Params::Validate does except for the `validate` and `validate_pos` subroutines.

## ATTRIBUTES

- Validate

  This attribute corresponds to the `validate` subroutine in Params::Validate.

- ValidatePos

  This attribute corresponds to the `validate_pos` subroutine in Params::Validate.

## OO

If you are using this module to mark methods for validation, as opposed to subroutines, it is crucial that you mark these methods with the `:method` attribute, as well as the `Validate` or `ValidatePos` attribute.

If you do not do this, then the object or class used in the method call will be passed to the validation routines, which is probably not what you want.

## CAVEATS

You must put all the arguments to the `Validate` or `ValidatePos` attribute on a single line, or Perl will complain.

# SEE ALSO

Params::Validate

# AUTHORS

- Dave Rolsky <autarch@urth.org>

- Ilya Martynov <ilya@martynov.org>

# COPYRIGHT AND LICENSE

This software is Copyright (c) 2001 - 2015 by Dave Rolsky and Ilya Martynov.

This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)

Attribute::Params::Validate - Define validation through subroutine attributes