package Bogus; use Data::Dump 'pp'; sub foo { printf "foo got %s\n", pp([@_]) } sub bar { printf "bar got %s\n", pp([@_]) } sub baz { printf "baz got %s\n", pp([@_]) } package MyBogus; use Moose; use MooseX::NonMoose; extends 'Bogus'; around [qw( foo bar baz )] => sub { my $orig = shift; my $self = shift; $orig->(@_); }; package Tester; use Moose; use MyBogus; has 'bogus' => ( is => 'bare', default => sub { MyBogus->new }, handles => [qw( foo bar baz )], ); package main; my $tester = Tester->new; $tester->bar('bar'); $tester->foo('ram'); $tester->baz('ewe'); __END__ prints: bar got ["bar"] foo got ["ram"] baz got ["ewe"]