Roles are composable units of behavior. They are useful for factoring out functionality common to many classes from any part of your class hierarchy. See L for an introduction to L. While combining roles affords you a great deal of flexibility, individual roles have very little in the way of configurability. Core Moose provides C<-alias> for renaming methods and C<-excludes> for ignoring methods. These options are primarily for resolving role conflicts. Depending on how much of a purist you are, these options are I for resolving role conflicts. See L for more about C<-alias> and C<-excludes>. Because roles serve many different masters, they usually provide only the least common denominator of functionality. To empower roles further, more configurability than C<-alias> and C<-excludes> is required. Perhaps your role needs to know which method to call when it is done processing. Or what default value to use for its C attribute. Parameterized roles offer a solution to these (and other) kinds of problems. WWW: https://metacpan.org/release/MooseX-Role-Parameterized