The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use Benchmark qw(:all);
use Config; printf "Perl/%vd on %s\n", $^V, $Config{archname};

use Text::ClearSilver;
use HTML::Template::Pro;
use MobaSiF::Template;

foreach my $mod(qw(Text::ClearSilver HTML::Template::Pro MobaSiF::Template)) {
    print $mod, "/", $mod->VERSION, "\n";
}

my $vars      = {
    hoge => 1,
    fuga => "fuga",
};
my @load_path = qw(benchmark/template);

$vars->{hdf}{loadpaths} = \@load_path;

my $mst_in  = "benchmark/template/simple.mst";
my $mst_bin = "benchmark/template/simple.mst.out";
MobaSiF::Template::Compiler::compile($mst_in, $mst_bin);

if(0){
    my $tcs = Text::ClearSilver->new();
    print "T::CS\n";
    $tcs->process('simple.cs', $vars);

    print "MobaSiF::T\n";
    print MobaSiF::Template::insert($mst_bin, $vars);
    exit;
}

print "Persistent processes:\n";
my $tcs = Text::ClearSilver->new();
my $ht = HTML::Template::Pro->new(
    filename       => 'simple.ht',
    case_sensitive => 1,
    path           => \@load_path,
);

cmpthese -1, {
    'T::CS' => sub {
        $tcs->process('simple.cs', $vars, \my $output);
        return;
    },
    'MobaSiF::T' => sub {
        MobaSiF::Template::insert($mst_bin, $vars);
        return;
    },
    'H::T::Pro' => sub {
        $ht->param(%{$vars});
        my $output = $ht->output();
        return;
    },
};