KinoSearch makes simple things very simple.
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.
It was incredibly easy to get started with WWW::Search::PubMed.
Users can run any search that can be run on PubMed, but the only fields that can be retrieved are title, PMID, URL, abstract, date, and description (i.e. authors + journal, concatenated).
I found it useful to glance back at the PubMed search field descriptions and tags while formulating queries.
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.
A useful solution to a common problem.
There's a world of difference between
ok( $number >= 9 and $number <= 11 );
delta_within( $number, 10, 1 );
particularly when it comes coupled with appropriate error messages.
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.
Amazingly underhyped. Search::Tools helped me knock out the results UI layer of a tiny custom search app in minutes.
I like the interface, and the way the system's constructed as a set of tools, each of which you can choose to use or ignore, giving the user full control.
All the pieces just work magically out of the box, and I love all the little touches to enhance backwards compatibility (e.g. Unicode transliteration).
Very highly recommended.
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.
About as close as possible to a perfect Do-What-I-Mean solution to an otherwise painful, complicated, process.
Easy to use, very complete for general tasks, and works exactly as documented.
There seems not to have been an update since 2002, which hasn't been a problem for me, but there's a handful of issues in the bug tracker that probably ought to be looked into.