I needed to match a large number of of unstructured strings against a set of ontology terms (e.g. matching "two giraffes at the zoo" to the term "Giraffe"), with support for stemming.
In less than an hour, I installed KinoSearch, read the docs, and wrote a 40 line Perl app that (a) used KSx::Simple to index the ontology terms, (b) ran each unstructured text string against the index, and (c) returned the top-matching ontology term for each unstructured text string.
Boost::Graph is well-documented and very easy to use.
Unfortunately, when I tried to determine the Dijkstra shortest path for a dataset of several hundred points with unevenly weighted paths, the memory usage would sometimes balloon like crazy. I'm fairly certain this is a property of the underlying Boost library, rather than this Perl interface.
When I switched from using Boost::Graph to the pure-Perl Graph module, my application stopped using up all the memory on the system, and my batch process ran about 10x faster. (It's quite possible that this issue is specific to my particular dataset.) It's too bad, because I like the interface to Boost::Graph better.
I wanted to speed up XML::Simple parsing of several thousand XML files in my app by trying a different SAX parser. XML::Bare::SAX::Parser was actually about 25% slower than using XML::Parser's SAX parsing.
Given that speed is an important advertised feature in the XML::Bare project, I want to note that as of version 0.01, XML::Bare::SAX::Parser isn't necessarily faster than the alternatives, and that it bears benchmarking if you use it in your app.
Sort::Naturally helped me get rid of about 25 lines of hard-to-read code sorting complex alphanumeric strings. nsort worked perfectly out of the box, without my needing to worry about configuration or special options.
I used IPC::DirQueue for a small project, managing a queue of about 80,000 small tasks of varying priorities, some of which could fail and need to be retried. The system was easy to get started with, and worked perfectly.