use strict; use warnings; package MyRole; use Moo::Role; sub call { my $self = shift; return undef; } package MyClass; use Moo; with 'MyRole'; around call => sub { my ($orig, $self) = @_; my $document = $self->$orig; unless ($document) { die 'Error'; } return $document; }; package main; use Test::More; no strict 'refs'; no warnings qw/redefine once/; *MyClass::call = sub { "tada!" }; ok my $class = MyClass->new(); ok $class->call(); done_testing;