The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Text::MicroTemplate::DataSectionEx;
use strict;
use warnings;
use base 'Text::MicroTemplate::Extended', 'Exporter';

our $VERSION = '0.01';
our @EXPORT_OK = qw(render_mt);

use Carp;
use Encode;
use Data::Section::Simple;

sub new {
    my $self = shift->SUPER::new(@_);
    $self->{package} ||= scalar caller;
    $self->{section} = Data::Section::Simple->new( $self->{package} );

    $self;    
}

sub build_file {
    my ($self, $file) = @_;

    # return cached entry
    if (my $e = $self->{cache}{ $file }) {
        return $e;
    }

    my $data = $self->{section}->get_data_section($file);
    if ($data) {
        $self->parse(decode_utf8 $data);

        local $Text::MicroTemplate::_mt_setter = 'my $_mt = shift;';
        my $f = $self->build();

        $self->{cache}{$file} = $f if $self->{use_cache};
        return $f;
    }
    croak "could not find template file: $file in __DATA__ section";
}

sub render_mt {
    my $self = ref $_[0] ? shift : __PACKAGE__->new(package => scalar caller);
    $self->render_file(@_);
}

1;