The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
package MyTemplates;
use strict;
use warnings;
use Template::Declare::Tags;
use base 'Template::Declare';

sub wrap (&) {
    my $code = shift;

    smart_tag_wrapper {
        my %p = @_;
        html {
            head {
                title { $p{title} }
            };

            $code->();

            div {
                outs 'footer';
            }
        }
    }
}

template 'test' => sub {
    with(title => 'Test'),
    wrap {
        h1 { "Hello, world!" }
    };
};

package main;
use Test::More tests => 2;

Template::Declare->init(roots => ['MyTemplates']);
my $output = Template::Declare->show('test');

unlike($output, qr{<html.*title="Test">});
like($output, qr{<title>\s*Test\s*</title>});