The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
{
	package Local::EmailAddress;
	use Moose;
	has [qw/local_part domain_part/] => (is => 'rw', isa => 'Str');
	sub to_string {
		my ($self) = @_;
		join '@', $self->local_part, $self->domain_part;
	}
}

use Test::More tests => 5;
use MooseX::Prototype create_class_from_prototype => { -as => q(use_as_prototype) };

my $GmailAddress = use_as_prototype(
	Local::EmailAddress->new( domain_part => 'gmail.com' )
	);
ok(defined $GmailAddress);

my $HotmailAddress = use_as_prototype(
	Local::EmailAddress->new( domain_part => 'hotmail.com' ),
	'HotmailAddress',
	);
is($HotmailAddress, 'HotmailAddress');

my $alice = $GmailAddress->new(local_part => 'alice');
is($alice->to_string, 'alice@gmail.com');

my $bob = $HotmailAddress->new(local_part => 'bob');
is($bob->to_string, 'bob@hotmail.com');

my $carol = $HotmailAddress->new(local_part => 'carol', domain_part => 'hotmail.co.uk');
is($carol->to_string, 'carol@hotmail.co.uk');