Thanks to mst on #moose:
MyClass.pm
package MyClass;
use Moo;
use FindBin qw($Bin);
use lib $Bin;
with 'MyRole';
around foo => sub {
my ($orig, $self) = @_;
return 'Wrapped ' . $self->$orig;
};
rolesketch.pl
use 5.016;
use FindBin qw($Bin);
use lib qq($Bin);
require MyRole;
our $orig = MyRole->can('foo');
no warnings 'redefine';
*MyRole::foo = sub { goto &$orig };
{
local $orig = sub {'baz'};
require MyClass;
my $obj = MyClass->new;
my $res = $obj->foo;
if ( $res =~ /baz$/ ) {
say qq{OK, got $res};
}
else {
say qq{Not OK, got $res};
}
}