in reply to Module for XML output
A size of “5 to 10 megabytes,” i-f it can comfortably be projected never to grow unreasonably bigger than that, definitely qualifies as something that is not too interesting. You can simply do the whole task in memory. Perhaps your file-parsing code simply constructs a “hash of hashes” structure in memory, then you use any one of several available XML routines (in this case, I would say to keep it XML::Simple ...) to write out that structure as XML. Poof. Done.
If the processing of input data is “hairy and difficult,” a true parser such as Parse::RecDescent can (after(!) the learning-curve beast is slain...) take you anywhere that you want to go. But otherwise don’t borrow trouble.