It's important to note that XML::Simple has been ported to the XML::SAX API (as XML::SAX::Simple). This means you can get the ease of use of XML::Simple with the benefits of XML::SAX. One of the chief benefits is that you can use other parsers besides expat (the parser XML::Parser uses). expat is notoriously inefficient as an XML parser. libxml2 (the C library at the core of XML::LibXML) is much faster, and has already been ported to the XML::SAX API. So if you used XML::LibXML as your parsing library and XML::SAX::Simple as your parser, you could get a very fast, very easy solution to this problem.