There are plenty of async DNS modules (Net::DNS::Resolver::bgsend(), Net::DNS::Async, Net::ADNS, AnyEvent::DNS) but I have found this one to be the easiest to use and the most elegant to work with.
Async programming is not easy and this module is as easy as it gets. Highly recommended!
I made a web service use REST and JSON when one of our major users called us to ask if we could make it available in SOAP. Grinding my teethes, I searched CPAN for SOAP in the hope of finding an easy way to implement it...
Let's say that I was not reassured when I started reading the docs for SOAP::Simple: "Let's face it. SOAP is painfull. It's a dumb idea, the only reason you should ever consider using SOAP is if someone holds a gun to your head or pay you a lot of money for it."
I then stumbled upon guide.soaplite.com/ and things started looking good. In in couple hours I was able to extend my web service to SOAP with very little effort! :)
The only thing that took me a while to find out was that I was using 'use warnings "all"' and it caused the script to return a warning to the web server, causing a "Incomplete headers" error to be sent to the browser, while not showing any warning when running it from the command line...
At work, I need to parse several huge XML files (~50MB) every day to get just about 1-2 MB of data. With XML::Simple it used to take a very long time to parse each file. I was so desperate that I started doing some regexp on the XML files before sending them to XML:Simple!
I got a great speedup by switching to XML::Bare: between 5x and 25x depending on the size of the XML file!
In short, XML::Bare is great if you just want to quickly parse big XML files.