package Sellable; use Moose::Role; requires qw( price ); has sold_price => ( isa => 'Num', is => 'rw' ); around price => sub { my ($orig, $self, @params) = @_; # Start at 10% over sale price. return $self->$orig( @params ) * 1.1; } sub barter { ... some code here to handle bartering to get a fair sale price ... } no Moose::Role;