The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package onlyTemplate;
@EXPORT = qw(write_template);
use strict;
use base 'Exporter';
use File::Spec;
use File::Path;

sub write_template {
    my ($template_path, $target_path, $lookup) = @_;
    open TEMPLATE, $template_path
      or die "Can't open $template_path for input:\n$!\n";
    my $template = do {local $/;<TEMPLATE>};
    $template =~ s/<%(\w+)%>/$lookup->{$1}/g;
    close TEMPLATE;

    my @parts = split '/', $target_path;
    my $file = pop @parts;
    mkpath(File::Spec->catdir(@parts));
    my $target = File::Spec->catfile(@parts, $file);

    open CONFIG, "> $target"
      or die "Can't open $target for output:\n$!\n";
    print CONFIG $template;
    close CONFIG;
}

1;