The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Template::Plugin::Octets;

use 5.008009;
use strict;
use warnings;
use base 'Template::Plugin::Procedural';

our $VERSION = '0.17';

use constant KIBIO_DIV => 1024;            # 1 KBio
use constant MIBIO_DIV => 1024*1024;       # 1 MBio
use constant GIBIO_DIV => 1024*1024*1024;  # 1 GBio

#
# kibioctets
sub kio { _formatter(KIBIO_DIV, $_[0]) }

#
# mebioctets
sub mio { _formatter(MIBIO_DIV, $_[0]) }

#
# gibioctets
sub gio { _formatter(GIBIO_DIV, $_[0]) }

#
# Format octets
sub _formatter {
    my ($divider, $value) = @_;

    $value = 0 if $value eq '' or !defined $value;

    $value = sprintf '%.1f', $value/$divider;

    return '~0' if $value eq '0.0';
    return $value;
}

1;
__END__

=head1 NAME

Template::Plugin::Octets - TT2 plugin to format numeric values as binary octets

=head1 VERSION

version 0.17

=head1 SYNOPSIS

    [% USE Octets %]

    Xmit [% Octets.kio(100500) -%] Kio
    Recv [% Octets.mio(9000) -%] Mio

    # Output:
    # Xmit 98.1 Kio
    # Recv ~0 Mio

=head1 DESCRIPTION

Template::Plugin::Octets is a plugin for Template Toolkit v2, which allows you to format numbers in templates.
Try to run

    tpage eg/traffic.tt

to see it in action.

=head1 METHODS

=over

=item B<kio>

Format value as kibioctets (2^10 octets).

=item B<mio>

Format value as mebioctets (2^20 octets).

=item B<gio>

Format value as gibioctets (2^30 octets).

=back

=head1 SEE ALSO

L<Template>

L<Template::Plugin::Procedural>

=head1 AUTHOR

Anton Gerasimov, E<lt>chim@cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2013 by Anton Gerasimov

This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut