NAME
Data::Formula - formulas evaluation and calculation
SYNOPSIS
my $df = Data::Formula->new(
formula => 'var212 - var213 * var314 + var354',
);
my $val = $df->calculate(
var212 => 5,
var213 => 10,
var314 => 7,
var354 => 100
);
# 5-(10*7)+100
my $df = Data::Formula->new(
variables => [qw( var212 var213 n274 n294 var314 var334 var354 var374 var394 )],
formula => 'var212 - var213 + var314 * (var354 + var394) - 10',
on_error => undef,
on_missing_token => 0,
);
my $used_variables = $df->used_variables;
# [ var212 var213 var314 var354 var394 ]
my $val = $df->calculate(
var212 => 5,
var213 => 10,
var314 => 2,
var354 => 3,
var394 => 9,
);
# 5-10+2*(3+9)-10
DESCRIPTION
evaluate and calulate formulas with variables of the type var212 -
var213 + var314 * (var354 + var394) - 10
ACCESSORS
formula
Formula for calculation. Required.
on_error
Sets what should "calculate()" return in case of an error. When division
by zero happens or unknown tokens are found.
Can be a scalar value, like for example 0 or "undef", or a code ref that
will be executed with error message as argument.
Optional, if not set "calculate()" will throw an exception in case of an
error.
on_missing_token
Sets what should happen when there is a missing/unknown token found in
formula.
Can be a scalar value, like fixed number, or a code ref that will be
executed with token name as argument.
Optional, if not set "calculate()" will throw an exception with unknown
tokens.
METHODS
new()
Object constructor.
my $df = Data::Formula->new(
formula => 'var212 - var213 * var314 + var354',
);
used_variables()
return array with variables used in formula
calculate()
Evaluate formula with values for variables, returns calculated value.
Will throw expetion on division by zero of unknown variables, unless
changes by "on_error" or "on_missing_token"
AUTHOR
Jozef Kutej, ""
CONTRIBUTORS
The following people have contributed to the File::is by committing
their code, sending patches, reporting bugs, asking questions,
suggesting useful advises, nitpicking, chatting on IRC or commenting on
my blog (in no particular order):
Andrea Pavlovic
Thomas Klausner
THANKS
Thanks to VĂ–V - Verband Ă–sterreichischer Volkshochschulen
for sponsoring development of this module.
LICENSE AND COPYRIGHT
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.