Slide 16
Slide 16 text
Object State Validation
package Starship;
use Moose;
has 'captain', is => 'ro', isa => 'Str', required => 1;
has 'crew', is => 'rw', isa => 'ArrayRef[Str]', required => 1;
sub BUILD {
my $self = shift;
if ( $self->captain ~~ $self->crew ) {
my $captain = $self->captain;
die "Validation Error: Cannot use $captain for both Captain and Crew";
}
}
package main;
# Validation error
my $enterprise = Starship->new( {
captain => 'James T Kirk',
crew => ['Dr. McCoy', 'Scott', 'Lt. Uhura', 'James T Kirk'],
});
Friday, July 6, 12