use strict;
use warnings;
use v5.10;
use Person;
use Employee;
my $student = Person->new( name => 'Foo' );
say $student->name; # Foo
my $programmer = Employee->new( name => 'Bar', employer => 'Perl Corp' );
say $programmer->name; # Bar
say $programmer->employer; # Perl Corp
my $unemployed = Person->new( name => 'Foo', employer => 'Java Corp' );
# Exception:
# Found unknown attribute(s) init_arg passed to the constructor: employer ...
package Person;
use Moose;
use Moose::Util::TypeConstraints;
use MooseX::StrictConstructor;
enum 'Person::Type::Sex' => [ qw(f m) ];
coerce 'Person::Type::Sex'
=> from 'Str'
=> via { lc substr($_, 0, 1) };
has 'name' => (is => 'rw');
has 'birthday' => (isa => 'DateTime', is => 'rw');
has 'sex' => (isa => 'Person::Type::Sex', is => 'rw', coerce => 1);
1;