I've recently released a new module called Object::Util to CPAN. This is a set of handy methods for working with classes and objects in Perl. It is inspired by Safe::Isa, a module which takes advantage of the fact that coderefs may be called as methods on Perl objects:

my $method = sub { ... }; $object -> $method ( @args );

Object::Util gives you a set of coderef utility methods that are applicable to a wide range of classes and objects.

$class->$_new(%args) is the same as $class->new(%args) except that it automatically loads $class if it's not already loaded, and allows $class to be a coderef instead of a class name (in which case it just passes %args to the coderef). It is intended for dependency injection, where you have been passed a class or coderef and are expected to use that to generate objects.

$object->$_clone() clones an object. It delegates to the object's clone() method (if it has one), and otherwise tries a bunch of fallback techniques. $object->$_clone(%args) clones an object, but passes some extra arguments to the constructor.

$class->$_with_traits(@traits) is inspired by MooseX::Traits, but should work equally well with Moose, Mouse, Moo, or Role::Tiny.

$object->$_extend(\%methods) is inspired by Object::Extend and prototype-based programming.

$_isa , $_can , $_does , $_DOES , and $_call_if_object are stolen from Safe::Isa.

$object->$_try($method => @args) will call the method, but catch and ignore any exceptions thrown.

$object->$_tap($method => @args) is stolen from Object::Tap.

$object->$_dump() dumps the guts of an object.

Although designed to work nicely with Moose, Mouse, Moo, and Class::Tiny, Object::Util doesn't require any of those. It's a reasonably light-weight module.