String-TT
view release on metacpan or search on metacpan
lib/String/TT.pm view on Meta::CPAN
package String::TT;
use strict;
use warnings;
use PadWalker qw(peek_my);
use Carp qw(confess croak);
use Template;
use List::Util qw(min);
use Sub::Exporter -setup => {
exports => [qw/tt strip/],
};
our $VERSION = '0.03';
our $AUTHORITY = 'CPAN:JROCKWAY';
my %SIGIL_MAP = (
'$' => 's',
'@' => 'a',
'%' => 'h',
'&' => 'c', # probably do not need
'*' => 'g', # probably do not need
);
{
my $engine;
sub _build_tt_engine {
return $engine ||= Template->new;
}
}
sub tt($) {
my $template = shift;
confess 'Whoa there, I need a template' if !defined $template;
my %vars = %{peek_my(1)||{}};
my %transformed_vars;
for my $v (keys %vars){
my ($sigil, $varname) = ($v =~ /^(.)(.+)$/);
my $suffix = $SIGIL_MAP{$sigil};
my $name = join '_', $varname, $suffix;
$transformed_vars{$name} = $vars{$v};
if($sigil eq '$'){
$transformed_vars{$name} = ${$transformed_vars{$name}};
}
}
# add the plain scalar variables (without overwriting anything)
for my $v (grep { /_s$/ } keys %transformed_vars) {
my ($varname) = ($v =~ /^(.+)_s$/);
if(!exists $transformed_vars{$varname}){
$transformed_vars{$varname} = $transformed_vars{$v};
}
}
my $t = _build_tt_engine;
my $output;
$t->process(\$template, \%transformed_vars, \$output)
|| croak $t->error;
return $output;
}
sub strip($){
my $lines = shift;
my $trailing_newline = ($lines =~ /\n$/s);# perl silently throws away data
( run in 1.673 second using v1.01-cache-2.11-cpan-39bf76dae61 )