package Point { use Moose; has [qw/x y/] => ( isa => 'Int', is => 'rw' ); sub inverted { my $self = shift; __PACKAGE__->new( x => $self->y, y => $self->x ); } }