NAME
MooseX::Lexical::Types - automatically validate lexicals against Moose type constraints
VERSION
version 0.01
SYNOPSIS
use MooseX::Types::Moose qw/Int/; # import Int type constraint
use MooseX::Lexical::Types qw/Int/; # register Int constraint as lexical type
my Int $foo; # declare typed variable
$foo = 42; # works
$foo = 'bar'; # fails
DESCRIPTION
This module allows you to automatically validate values assigned to lexical variables using Moose type constraints.
This can be done by importing all the MooseX::Types constraints you you need into your namespace and then registering them with MooseX::Lexical::Types. After that the type names may be used in declarations of lexical variables via my
.
Values assigned to variables declared with type constraints will be checked against the type constraint.
At runtime the type exports will still return Moose::Meta::TypeConstraint
s.
There are a couple of caveats:
- It only works with imported MooseX::Types
-
Using normal strings as type constraints, like allowed in declaring type constraints for attributes with Moose, doesn't work.
- It only works with scalars
-
Things like
my Str @foo
will not work. - It only works with simple named types
-
The type name specified after
my
needs to be a simple bareword. Things likemy ArrayRef[Str] $foo
will not work. You will need to declare a named for every type you want to use inmy
:subtype ArrayOfStr, as ArrayRef[Str]; my ArrayofStr $foo;
- Values are only validated on assignment
-
my Int $foo;
will not fail, even if
$foo
now holds the valueundef
, which wouldn't validate againstInt
. In the future this module might also validate the value on the first fetch from the variable to properly fail when using an uninitialized variable with a value that doesn't validate.
AUTHOR
Florian Ragwitz <rafl@debian.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2009 by Florian Ragwitz.
This is free software; you can redistribute it and/or modify it under the same terms as perl itself.