inherit-disc.txt

use feature qw/say/;
use MooseX::Declare;

class Foo {
    has x => ( is => 'rw', isa => 'Num', default => 1 );
    has y => ( is => 'rw', isa => 'Num', default => 2 );
    has z => ( is => 'rw', isa => 'Num', default => 3 );
}

class Foo::Bar extends Foo {
    has '+z' => ( default => 42 );

    before z (Num $num?) {
        if(defined $num) {
            warn "z will get a new value. Old value: ", $self->z, "\n";
        }
    }

    after z (Num $num?) {
        if(defined $num) {
            warn "z got a new value: $num\n";
        }
    }
}

say Foo->new->z;         # 3
say Foo::Bar->new->z;    # 42
say Foo::Bar->new->x;    # 1 
say Foo::Bar->new->z(0); # 0 - will also print (pretty useless) debug info