package C1; use Moose; sub html { my $this = shift; return '' . $this->head . '' . inner() . '' . ''; } sub head { my $self = shift; my $child_implementation = $self->meta->get_method('head'); my $has_child_implementation = blessed($child_implementation) && $child_implementation->isa('Moose::Meta::Method::Augmented'); return '' . ($has_child_implementation ? inner() : '') . ''; } package C2; use Moose; extends 'C1'; augment html => sub { return 'C2'; }; package main; warn C2->new->html;