Hi all, This problem is annoying and I'm not sure of the best approach.
Let's say I have a list of roles and an object and I want to serialize the object as XML. Imagine the following (this is my actual use case): sub to_xml { my $self = shift; my $xml = ''; # string XML sucks. Just an example :) foreach my $role ($self->meta->roles) { # or whatever it's called next unless $role->meta->does('DoesXML'); $xml .= $role->as_xml($self); # method available on the role itself } return $xml; } In other words, tying methods and roles specifically to roles and their state might be useful. Here's a better(?) example, also pseudo-code: package Thing; use Moose; with qw( DoesRobot DoesDrawable ); Now imagine that both the robot and drawable roles provide a draw() method, but the robot on tries to control a robotic arm with a pencil. Canonically, you do something like this: package Thing; use Moose; with ( DoesRobot => { excludes => 'draw', aliases => { draw => 'draw_with_arm' }, 'DoesDrawable' ); Now if another class tries to instantiate Thing->new, it doesn't really know what the draw() method has been renamed to for the Robot role. You can get to it through reflection (I think), but that's annoying. What's the easiest way to *not* worry about this method being renamed? Is it something like this awful pseudo-code? $thing->meta->does_role('DoesRobot')->get_method('draw')->($thing); Does that make sense? Cheers, Ovid -- Buy the book - http://www.oreilly.com/catalog/perlhks/ Tech blog - http://use.perl.org/~Ovid/journal/ Twitter - http://twitter.com/OvidPerl Official Perl 6 Wiki - http://www.perlfoundation.org/perl6