MooseX-Contract +---------+ | WARNING | +---------+ This module should be considered EXPERIMENTAL and should not be used in critical applications unless you're willing to deal with all the typical bugs that young, under-tested software has to offer! +----------+ | SYNOPSIS | +----------+ This module provides "Design by Contract" functionality using Moose method hooks. For example, in your Moose-built class: package MyEvenInt; use MooseX::Contract; # imports Moose for you! use Moose::Util::TypeConstraints; my $even_int = subtype 'Int', where { $_ % 2 == 0 }; invariant assert { shift->{value} % 2 == 0 } '$self->{value} must be an even integer'; has value => ( is => 'rw', isa => $even_int, required => 1, default => 0 ); contract 'add' => accepts [ $even_int ] => returns void; sub add { my $self = shift; my $incr = shift; $self->{value} += $incr; return; } contract 'get_multiple' => accepts ['Int'], => returns [$even_int]; sub get_multiple { return shift->{value} * shift; } no MooseX::Contract; INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc MooseX::Contract You can also look for information at: RT, CPAN's request tracker http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-Contract AnnoCPAN, Annotated CPAN documentation http://annocpan.org/dist/MooseX-Contract CPAN Ratings http://cpanratings.perl.org/d/MooseX-Contract Search CPAN http://search.cpan.org/dist/MooseX-Contract/ COPYRIGHT AND LICENCE Copyright (C) 2009 Brian Phillips This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.