CPAN::Distribution::get might do the trick.
In reply to Re: Programmatic way to get CPAN Module tarballs? by ctilmes in thread Programmatic way to get CPAN Module tarballs? by Plankton