The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# vim:et:sts=4:sws=4:sw=4
use 5.010;
use strict;
use warnings;
use HTML::Template::Compiled;
use HTML::Template::Compiled::Plugin::NumberFormat;
use Number::Format;
my $template = <<"EOM";
<%= .nums.big escape=format_number %>
<%format_number .nums.big_dec precision=3 %>
<%= .nums.price escape=format_price %>
<%= .nums.bytes1 escape=format_bytes %>
<%= .nums.bytes2 escape=format_bytes %>
<%= .nums.bytes3 escape=format_bytes %>
EOM
my $nf = Number::Format->new(
    -thousands_sep      => '.',
    -decimal_point      => ',',
    -int_curr_symbol    => "\x{20ac}",
    -kilo_suffix        => 'Kb',
    -mega_suffix        => 'Mb',
    -decimal_digits     => 2,
);

my $plug = HTML::Template::Compiled::Plugin::NumberFormat->new({
    formatter => $nf,
});
my $htc = HTML::Template::Compiled->new(
    scalarref => \$template,
    plugin => [$plug],
);

my %p = (
    nums => {
        big => 123_456_789_123,
        big_dec => 123_456_789_123.765,
        price => 459.95,
        bytes1 => 1_024,
        bytes2 => 1_500,
        bytes3 => 1_500_000,
    },
);
$htc->param( %p );

binmode STDOUT, ":encoding(utf-8)";
say $htc->output;