moose-role.txt

#=============
package RoleA;

use Moose::Role;

requires 'foo';

before foo => sub {
    print "before!\n";
};

#=============
package Class;

use Moose;

sub foo {
    print "main!\n";
}

with qw/RoleA/;
# ^ will result in:
# We have encountered an attribute conflict with 'a' during composition

#============
package main;

my $obj = Class->new;

$obj->foo;