NAME Object::Pad::FieldAttr::Checked - apply type constraint checks to Object::Pad fields SYNOPSIS TODO DESCRIPTION This module provides a third-party field attribute for Object::Pad-based classes, which declares that values assigned to the field must conform to a given value constraint check. WARNING The ability for Object::Pad to take third-party field attributes is still new and highly experimental, and subject to much API change in future. As a result, this module should be considered equally experimental. FIELD ATTRIBUTES :Checked field $name :Checked(EXPRESSION) ...; Declares that any value assigned to the field must conform to the constraint checking object specified by the expression. Attempts to assign a non-conforming value will throw an exception and the field will not be modified. At compiletime, the string given by EXPRESSION is eval()'ed in scalar context, and its result is stored as part of the field's definition. The value of the expression must either be an object reference, or a string containing the name of a package. In either case, a method called check must exist on it. At runtime, this constraint checking value is used every time an attempt is made to assign a new value to the field, whether that is from :param initialisation, invoking a :writer or :mutator accessor, or direct assignment into the field variable by method code within the class. The checker is used as the invocant for invoking a check method, and the new value for the field is passed as an argument. If the method returns true, the assignment is allowed. If false, it is rejected with an exception and the field itself remains unmodified. $ok = $checker->check( $value ); As this is the interface supported by Types::Standard, any constraint object provided by that module is already supported here. use Types::Standard qw( Str Num ); field $name :Checked(Str); field $age :Checked(Num); TODO * Consider caching the result of the check method lookup. AUTHOR Paul Evans