package Command; use Moose::Exporter; Moose::Exporter->setup_import_methods( with_meta => ['command'], class_metaroles => { class => ['Command::Role::Class'], }, ); sub _command_method_meta { my ($meta) = @_; Moose::Meta::Class->create_anon_class( superclasses => [$meta->method_metaclass], roles => ['Command::Role::Method'], cache => 1, )->name; } sub command { my ($meta, $name, $code) = @_; $meta->add_method( $name => _command_method_meta($meta)->wrap( $code, name => $name, package_name => $meta->name, associated_metaclass => $meta ), ); }