Template::Plugin::Math - Plugin providing mathematical functions


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

Index


Code Index:

NAME

Top

Template::Plugin::Math - Plugin providing mathematical functions

SYNOPSIS

Top

    [% USE Math %]

    [% Math.sqrt(9) %]

DESCRIPTION

Top

The Math plugin provides numerous mathematical functions for use within templates.

METHODS

Top

Template::Plugin::Math makes available the following functions from the Perl core:

abs
atan2
cos
exp
hex
int
log
oct
rand
sin
sqrt
srand

In addition, if the Math::Trig module can be loaded, the following functions are also available:

pi
tan
csc
cosec
sec
cot
cotan
asin
acos
atan
acsc
acosec
asec
acot
acotan
sinh
cosh
tanh
csch
cosech
sech
coth
cotanh
asinh
acosh
atanh
acsch
acosech
asech
acoth
acotanh
rad2deg
rad2grad
deg2rad
deg2grad
grad2rad
grad2deg

If the Math::TrulyRandom module is available, and you've got the time to wait, the truly_random_number method is available:

    [% Math.truly_random_number %]

AUTHOR

Top

Andy Wardley <abw@wardley.org> http://wardley.org/

COPYRIGHT

Top

SEE ALSO

Top

Template::Plugin


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

#============================================================= -*-Perl-*-
#
# Template::Plugin::Math
#
# DESCRIPTION
#   Plugin implementing numerous mathematical functions.
#
# AUTHORS
#   Andy Wardley   <abw@wardley.org>
#
# COPYRIGHT
#   Copyright (C) 2002-2007 Andy Wardley.  All Rights Reserved.
#
#   This module is free software; you can redistribute it and/or
#   modify it under the same terms as Perl itself.
#
#============================================================================

package Template::Plugin::Math;

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

our $VERSION = 1.16;
our $AUTOLOAD;


#------------------------------------------------------------------------
# new($context, \%config)
#
# This constructor method creates a simple, empty object to act as a 
# receiver for future object calls.  No doubt there are many interesting
# configuration options that might be passed, but I'll leave that for 
# someone more knowledgable in these areas to contribute...
#------------------------------------------------------------------------

sub new {
    my ($class, $context, $config) = @_;
    $config ||= { };

    bless {
        %$config,
    }, $class;
}

sub abs   { shift; CORE::abs($_[0]);          }
sub atan2 { shift; CORE::atan2($_[0], $_[1]); } # prototyped (ugg)
sub cos   { shift; CORE::cos($_[0]);          }
sub exp   { shift; CORE::exp($_[0]);          }
sub hex   { shift; CORE::hex($_[0]);          }
sub int   { shift; CORE::int($_[0]);          }
sub log   { shift; CORE::log($_[0]);          }
sub oct   { shift; CORE::oct($_[0]);          }
sub rand  { shift; CORE::rand($_[0]);         }
sub sin   { shift; CORE::sin($_[0]);          }
sub sqrt  { shift; CORE::sqrt($_[0]);         }
sub srand { shift; CORE::srand($_[0]);        }

# Use the Math::TrulyRandom module
# XXX This is *sloooooooowwwwwwww*
sub truly_random {
    eval { require Math::TrulyRandom; }
         or die(Template::Exception->new("plugin",
            "Can't load Math::TrulyRandom"));
    return Math::TrulyRandom::truly_random_value();
}

eval {
    require Math::Trig;
    no strict qw(refs);
    for my $trig_func (@Math::Trig::EXPORT) {
        my $sub = Math::Trig->can($trig_func);
        *{$trig_func} = sub { shift; &$sub(@_) };
    }
};

# To catch errors from a missing Math::Trig
sub AUTOLOAD { return; }

1;

__END__

# Local Variables:
# mode: perl
# perl-indent-level: 4
# indent-tabs-mode: nil
# End:
#
# vim: expandtab shiftwidth=4: