NAME

Attribute::Property - lvalue methods as properties with value validation.

SYNOPSIS

CLASS

package SomeClass;

use Attribute::Property;
use Carp;

sub new { bless { }, shift }

sub nondigits : Property { /^\D+\z/ }
sub digits    : Property { /^\d+\z/ or croak "custom error message" }
sub anyvalue  : Property;
sub another   : Property;

USAGE

my $object = SomeClass->new;

$object->nondigits = "abc";
$object->digits    = "123";
$object->anyvalue  = "abc123\n";

$object->anyvalue('archaic style still works');

# These would croak
$object->nondigits = "987";
$object->digits    = "xyz";

DESCRIPTION

This module introduces the Property attribute, which turns your method into an object property. The original code block is used only to validate new values, the module croaks if it returns false.

Feel free to croak explicitly if you don't want the default error message.

Undefined subs (subs that have been declared but do not have a code block) with the Property attribute will be properties without any validation.

PREREQUISITES

Your object must be a blessed hash reference. The property names will be used for the hash keys.

COMPATIBILITY

Old fashioned $object->property(VALUE) is still available.

This module requires a modern Perl, fossils like Perl 5.00x don't support our chicanery.

LICENSE

There is no license. This software was released into the public domain. Do with it what you want, but on your own risk. Both authors disclaim any responsibility.

AUTHORS

Juerd Waalboer <juerd@cpan.org>

Matthijs van Duin <pl@nubz.org>