My OO style is simple and clean, thanks to Attribute::Property:
package Some::Class;
sub new : New {
my ($self) = @_;
exists $self->{$_} or croak "Mandatory argument '$_' missing"
for qw(id foo);
return $self;
}
sub id : Property { /^\d+\z/ }
sub foo : Property;
sub bar : Property;
sub blah : Property { $_ < 50 }
sub _private : method {
my ($self) = @_;
...
}
sub do_something : method {
my ($self, $quux) = @_;
...
}
And this is how you use this
Some::Class:
my $thing = Some::Class->new( id => 15, foo => "Hello" );
$thing->foo =~ s/e/a/;
$thing->id++;
$thing->do_something($$);
$thing->blah = 10;
$thing->blah = 60; # dies
See also
$foo->bar = 14; and
$foo->bar = 14; revisited: Attribute::Property.
Juerd
# { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }