in reply to is Parse::RecDescent good for this job?
It is designed for exactly this type of problem. RecDescent will do the job but it is using the proverbial sledgehammer to crack a peanut.