There doesn't seem to be a way of having a private repository of modules, which one may install from. You can come pretty close, but not hit the target, exactly. For example, one may "run a mini-CPAN" using the mcpani tool (to do the administrative work on the mini CPAN repository), and use, for example cpanp to install. This works, but there is the overhead of having to mirror all the CPAN stuff to your local drive. It would be preferable if you could keep only your private modules in a mini-CPAN, and then when you installed, pull your private modules from your repository, and then move to the public CPAN to get the public modules.
An alternative to this approach is to use a tool like pip. The downfall here though is pip is too literal, you need to specify a filename. It's far preferable for deployment to be able to specify the module and version, and have the installer figure out where to get the actual file.
It seems like there is so much install machinery on CPAN (CPAN.pm, CPANPLUS, mcpani, minicpan, etc.), that I feel like I must be missing something. Isn't there an easy way to make a list of modules to install, some public, some private (e.g. in a Bundle::xxx), and then install these automatically (with some packages being fetched from private repos and some public). I guess this should work provided one has mirrored properly as I mention above (still waiting on all the files to get sucked down).
Not only that but there is no way to revert an install. This makes me think RPMs derived from perl modules are the way to go. Am I missing some obvious tools?