I second your suggestion. Parse::RecDescent would work for this (recently figured that one out too) but in this case, the above example will work well for simple calculations.
However - what if you need to do something that involves precedence? i.e. -
1 + 9 * ( 60 / 5 )