in reply to
Unless I miss something obvious, the language you're parsing is regular. Parse::RecDescent is a tool to deal with context free languages. Since every regular language is context free, you can use Parse::RecDescent to deal with it, but it's overkill.
Parsing a context free language is a relatively costly process compared to parsing a regular language (O(n^3) vs. O(n)) and since you're parsing lots of data, that is quite a difference. In this case it would almost certainly be much faster to implement your own parser as was suggested above.
Just my 2 cents, -gjb-