CPAN supports a native offline mode, which recommends doing it from a copy of the ~/.cpan/sources directory.
Once you've taken a copy, you can then install all files under it like this:
% find authors/ | grep -e "/id/.*\.gz" | perl -MCPAN -MCPAN::Config -n
+ -e '$CPAN::Config->{keep_source_where} = "/other/perlmodsrc/tars"; c
+homp; @f = split /\//; $mod = join("/", splice @f, -2, 2); CPAN::Shel
+l->install($mod);'
I have created one of these directories using only the ~/.cpan/sources/authors and not the ~/.cpan/sources/modules directory successfully, but CPAN seems to update them automatically.
I've also created one by creating a /somepath/cpan/authors/id/A/AL/ALL directory, and copying all the files into there, but that mucks up dependancies.
So, if you're happy enough to build the correct directory structure, and to copy in a recent ~/.cpan/sources/modules directory, and don't mind if CPAN does connect and maybe update those module definition files, then this should be a workable solution.
If you're worried about network connectivity or newer versions of modules coming available, then you could try hacking through PAUSE (mldistwatch specifically) to grab the file generator code, and auto-generate your 02packages.details.data.gz and 03modlist.data.gz which should allow the rest to work nicely.
Other ways would be to write a script to extract each tar, enter the directory, do a make and make install, then to go back and do a make test on each directory - this would nicely skip the dependancy issues.