Template::Sandbox::NumberFunctions - Basic number functions library for Template::Sandbox.


Template-Sandbox documentation Contained in the Template-Sandbox distribution.

Index


Code Index:

NAME

Top

Template::Sandbox::NumberFunctions - Basic number functions library for Template::Sandbox.

SYNOPSIS

Top

  use Template::Sandbox::NumberFunctions qw/:all/;

  # or:

  use Template::Sandbox::NumberFunctions;

  my $template = Template::Sandbox->new(
      library => [ Template::Sandbox::NumberFunctions => qw/ucfirst uc lc/ ],
      );

DESCRIPTION

Top

Library of basic string manipulation functions for easy import into a Template::Sandbox template.

EXPORTABLE TEMPLATE FUNCTIONS

Top

int( number )

Rounds number down to the first integer of lower value as per Perl's int().

round( number )

Rounds number to the nearest integer using mathematical rounding, that being 0.5 and greater being rounded up and everyhing below 0.5 being rounded down.

abs( number )

Return the absolute value of number as per Perl's abs() function.

numeric( number )

Reformat number for pretty display by adding thousands commas. Note that this does not respect locale.

currency( number )

Reformat number for pretty display by adding thousands commas and displaying to two decimal places. Note that this does not respect locale.

accountant_currency( number )

Reformat number for pretty display by adding thousands commas and displaying to two decimal places, additionally negative numbers will be displayed in round brackets rather than with a leading minus-sign. Note that this does not respect locale.

decimal( number, places )

Reformat number for display to places decimal places.

exp( number )
log( number )
pow( number, exponent )
sqrt( number )

Wrappers to corresponding Perl power functions (or ** operator for pow().)

rand( number | array )

Returns either a random number from 0 to number - 1, or if passed an array will return a random element from that array.

srand( number )

Wrapper to srand() Perl function.

min( a, b )
max( a, b )

Returns the min or max value from a or b accordingly.

EXPORTABLE GROUPS

Top

:all

Exports all defined template functions in this library.

:maths

Exports exp, log, pow and sqrt.

:display

Exports numeric, currency, accountant_currency and decimal.

KNOWN ISSUES AND BUGS

Top

There's not really a great many functions in here, the module could be regarded as largely superfluous since you could easily recreate it yourself if you needed it. However it provides a useful example of how to write your own library of template functions.

The pretty display functions don't respect locale and aren't going to do what you want if you're expecting "." as your thousands seperator and "," as your decimal marker.

SEE ALSO

Top

Template::Sandbox, Template::Sandbox::Library

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Template::Sandbox::NumberFunctions




You can also look for information at:

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Template-Sandbox

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Template-Sandbox

* CPAN Ratings

http://cpanratings.perl.org/d/Template-Sandbox

* Search CPAN

http://search.cpan.org/dist/Template-Sandbox

AUTHORS

Top

Original author: Sam Graham <libtemplate-sandbox-perl BLAHBLAH illusori.co.uk>

Last author: $Author: illusori $

COPYRIGHT & LICENSE

Top


Template-Sandbox documentation Contained in the Template-Sandbox distribution.

package Template::Sandbox::NumberFunctions;

use strict;
use warnings;

use base 'Template::Sandbox::Library';

use Template::Sandbox qw/:function_sugar/;

$Template::Sandbox::NumberFunctions::VERSION = '1.04';

#  From perlfaq5: add thousands-commas to number.
#  Yes it doesn't respect locale.
sub _commify
{
    local $_  = shift;
    1 while s/^([-+]?\d+)(\d{3})/$1,$2/o;
    return $_;
}

__PACKAGE__->set_library_functions(
    int      => ( one_arg sub { int( $_[ 0 ] ) } ),
    round    => ( one_arg
        sub
        {
            ( int( $_[ 0 ] * 10 ) % 10 >= 5 ) ?
            ( int( $_[ 0 ] ) + 1 ) :
            int( $_[ 0 ] )
        } ),
    abs      => ( one_arg sub { abs( $_[ 0 ] ) } ),

    #  Pretty numeric formatting.
    numeric  => ( one_arg \&_commify ),
    currency => ( one_arg
        sub { _commify( sprintf( '%.2f', $_[ 0 ] ) ) } ),
    accountant_currency => ( one_arg
        sub
        {
            ( $_[ 0 ] < 0 ) ?
                ( '(' . _commify( sprintf( '%.2f', abs( $_[ 0 ] ) ) ) . ')' ) :
                ( _commify( sprintf( '%.2f', $_[ 0 ] ) ) )
        } ),
    decimal  => ( two_args sub { sprintf( '%.' . $_[ 1 ] . 'f', $_[ 0 ] ) } ),

    exp     => ( one_arg sub { exp( $_[ 0 ] ) } ),
    log     => ( one_arg sub { log( $_[ 0 ] ) } ),
    pow     => ( two_args sub { $_[ 0 ] ** $_[ 1 ] } ),
    sqrt    => ( one_arg sub { sqrt( $_[ 0 ] ) } ),

    rand    => ( one_arg inconstant
        sub
        {
            ref( $_[ 0 ] ) ?
            $_[ 0 ]->[ int( rand( $#{$_[ 0 ]} + 1 ) ) ] :
            rand( $_[ 0 ] )
        } ),
    srand   => ( one_arg inconstant sub { srand( $_[ 0 ] ) } ),

    max     => ( two_args sub { $_[ 0 ] > $_[ 1 ] ? $_[ 0 ] : $_[ 1 ] } ),
    min     => ( two_args sub { $_[ 0 ] < $_[ 1 ] ? $_[ 0 ] : $_[ 1 ] } ),
    );

__PACKAGE__->set_library_tags(
    'maths'    => [ qw/exp log pow sqrt/ ],
    'display'  => [ qw/numeric currency accountant_currency decimal/ ],
    );

1;

__END__