The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 7;
use Test::Exception;

do {
    package Person;
    use Moose;
    use MooseX::HasDefaults::RO;

    has name => (
        isa => 'Str',
    );

    has birth_year => (
        isa => 'Int',
    );

    has favorite_language => (
        is      => 'rw',
        isa     => 'Str',
        default => 'Perl',
    );
};

can_ok(Person => qw(name birth_year favorite_language));

my $whacko = Person->new(name => 'Stevan', birth_year => 1924);
is($whacko->name, 'Stevan');
is($whacko->birth_year, 1924);
is($whacko->favorite_language, 'Perl');

throws_ok {
    $whacko->name('Stevan Little');
} qr/read-only accessor/;

throws_ok {
    $whacko->birth_year(1922);
} qr/read-only accessor/;

$whacko->favorite_language('C#'); # he's dead to us now..
is($whacko->favorite_language, 'C#');