The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
# based on http://www.geminium.com/chiba_blog/2009/07/12/212/

use strict;
use warnings;
use utf8;
use FindBin qw($Bin);

binmode STDOUT, ':utf8';

use Benchmark qw/cmpthese/;
use Template;
use HTML::FillInForm;
use HTML::FillInForm::Lite;

print "Benchmark: HTML::FillInForm vs. HTML::FillInForm::Lite\n";

chdir $Bin;

my $t = Template->new({
    ENCODING => 'UTF-8',
    FILTERS => {
        fillinform     => [\&fillinform, 1],
        fillinformlite => [\&fillinformlite, 1],
    },
});
my $f  = HTML::FillInForm->new;
my $fl = HTML::FillInForm::Lite->new;
my $filldata = {mail => 'foobar at example.com', name => '日本語の名前', tel => '123-456-789'};

cmpthese(-1, {
    fillinall => sub {
        $t->process("html/test.html", {
            hoge => 'aha'
        }, \my $output) or die $t->error;

        $f->fill(\$output, $filldata);
    },
    fillinpart => sub {
        $t->process("html/test_part.html", {
            hoge => 'aha',
            filldata => $filldata,
        }, \my $output) or die $t->error;
    },
    fillinall_lite => sub {
        $t->process("html/test.html", {
            hoge => 'aha'
        }, \my $output) or die $t->error;

        $fl->fill(\$output, $filldata);
    },
    fillinpart_lite => sub {
        $t->process("html/test_part_lite.html", {
            hoge => 'aha',
            filldata => $filldata,
        }, \my $output) or die $t->error;
    },
});
sub fillinform {
    my ($context, $data, @options) = @_;

    return sub {
        my $html = shift;

        $f->fill(\$html, $data, @options);
    };
}
sub fillinformlite {
    my ($context, $data, @options) = @_;

    return sub {
        my $html = shift;

        $fl->fill(\$html, $data, @options);
    };
}