I have my own DarkPAN. Several of my projects share code that's not yet ready for the public CPAN. Some of that code may never belong on the CPAN—it's far, far too specific for the problems I'm solving.
Experienced Perl hackers often joke that 90% of their applications comes directly from the CPAN. A few thousand lines of code on my part might make use of tens of thousands of lines of code written, debugged, tuned, improved, documented, tested, and maintained by countless other people. Even better, installing and maintaining and depending on that code requires only the use of a few simple tools, including App::perlbrew, Dist::Zilla, cpanminus, and cpan-outdated.
Yet I want to share code between my own applications without having to upload it to the public CPAN. I want to use the same tools to manage and deploy this code as I do to code from the public CPAN.
In short, I want my own private CPAN containing only the code I put there.
That's why I wrote something I'm calling CPAN::Dark for now. It's a thin wrapper around CPAN::Mini::Inject which creates an empty, private CPAN into which you can add any or all distribution you like.
If you do this, you can configure your CPAN tools to use your private DarkPAN as one of multiple mirrors, so that CPAN operations will find your private code. You can also (as I do) use the dzil ScpDeploy plugin to inject your code into your DarkPAN as easily as you would release it to the CPAN.
(It would be nice if
and other CPAN tools had a single point of configuration to manage mirror
lists, but that lack is reasonably easy to automate away for now.)
With all of my projects safely ensconced in a DarkPAN, it's even superlatively easy to test my code against any release of Perl 5 that perlbrew can manage. All I have to do is install the new version of Perl 5, then let cpanminus do its thing until it finds an error or completes successfully.
I've never had code deployment this easy before.
Your job, if you choose to accept it, is to give me feedback on CPAN::Dark. Is the name right? Does this solve a real problem? Is the documentation clear? (Does it need a mechanism to remove distributions?) Should it include configuration instructions for cpanminus/CPANPLUS/CPAN.pm?