Math::Expr does exactly what you want. Release date is 2001-10-01, so it's fairly up to date.
NAME
Math::Expr - Parses mathematical expressions
SYNOPSIS
use Math::Expr;
SetOppDB(new Math::Expr::OpperationDB('<DBFileName>'));
$e=Parse("a+4*b-d/log(s)+f(d,e)");
DESCRIPTION
Parses mathematical expressions into a tree structure. The expressions
may contain integers, real numbers, alphanumeric variable names,
alphanumeric function names and most other characters might be used
as operators...
From the pod. That's no reason not to write your own as an exercise :)
After Compline,
Zaxo