in reply to Seeking Advice: Writing a parser

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