Module::Release is a Perl module to automate software releases.
my $release = Module::Release->new( %params );
# call methods to automate your release process
Module::Release automates your software release process. It started as a script that automated my release process, so it has bits to talk to PAUSE (CPAN) and SourceForge, and to use Makefile.PL and CVS. Other people have extended this in other modules under the same namespace so you can use Module::Build, svn, and many other things.
The methods represent a step in the release process. Some of them check a condition (e.g. all tests pass) and die if that doesn't work.
Module::Release doesn't let you continue if something is wrong. Once you have checked everything, use the upload features to send your files to the right places.
The included release script is a good starting place. Don't be afraid to edit it for your own purposes.