Heh. Waiting for someone to vote you down because you mentioned that another language was sometimes superior to Perl :) (I won't vote someone down for that, though)
I don't know Parse::RecDescent...yet. However, as a matter of style, might I suggest that you reduct this to a minimal test case in which the problem is replicable? Perhaps you've done that (hence my comment about not knowing Parse::RecDescent), but I suspect you haven't. Trying to wade through so many lines of code to get to the actual problem makes it more difficult to assist you.
Join the Perlmonks Setiathome Group or just go the the link and check out our stats.