There's an example in
CPAN::ParseDistribution::Unix. It uses
Parallel::ForkManager to run the potentially time-consuming code in a seperate process, communicate its results back to the parent process, and time it out if it takes too long. This code only works reliably on Unix. If you can find a way of making it work on legacy platforms then I'd love to know.