package Document::Page; use Moose; has 'body' => ( is => 'rw', isa => 'Str', default => sub {''} ); sub create { my $self = shift; my $arg = shift; warn $arg; $self->open_page; inner($arg); $self->close_page; } sub append_body { my ( $self, $appendage ) = @_; $self->body( $self->body . $appendage ); } sub open_page { (shift)->append_body('') } sub close_page { (shift)->append_body('') } package Document::PageWithHeadersAndFooters; use Moose; extends 'Document::Page'; augment 'create' => sub { my $self = shift; my $arg = shift; warn $arg; $self->create_header; inner($arg); $self->create_footer; }; sub create_header { (shift)->append_body('
') } sub create_footer { (shift)->append_body('