package TestPackage;
use metaclass; # this sets up your class to use Class::MOP
use Data::Dump qw( dump );
my $obj = bless {}, __PACKAGE__;
print 'Can dump()' if $obj->meta->has_method('dump');
####
my @methods = $obj->meta->get_method_list;
####
my @methods = $obj->meta->compute_all_applicable_methods;
####
package MyFooInterface;
use Moose::Role;
requires 'bar';
####
package MyFoo;
use Moose;
with 'MyFooInterface';
sub bar { ... }
# the bar method is required, the
# class will fail to compile if it is
# not present
####
my $foo = MyFoo->new;
if ($foo->does('MyFooInterface')) { ... }