CPAN is awesome - it's "the killer feature for Perl". And you know who we've got to thank for that? Us! CPAN is a rambling random hodge-podge of code; dozens of duplicates; variable quality of code, documentation, test coverage and run-time performance. And d'you know who's to blame? Us!

When my partner was expecting our son, a good friend of ours said something that has really stuck with us:

"You get the children you're prepared to put up with."

— Hayley Lever

And I'm realising that this is true of most areas of your life. Some things you let slide (put up with); things you're not prepared to put up with, you do something about. In his keynote, GENEHACK talked about we get the Perl community we're prepared to put up with.

Similarly: we get the CPAN we're prepared to put up with.

What is CPAN, and what is it for?

It's like a dropbox for sharing Perl code: anyone can drop their code in there to share with everyone else. The barrier to entry is intentionally set very low, so anyone can add anything, and they do. Andy Lester (PETDANCE) wrote that "CPAN thrives because we allow unfettered uploading of shit, not in spite of it".

we allow unfettered uploading of shit, not in spite of it". Isaac Newton famously said "If I have seen further it is by standing on the shoulders of giants", but in Perl we all get to code further, because we're standing on each other's shoulders (one for Escher?).

It's a dumping ground where code is abandoned (once authors have solved their problem, or scratched their itch) and left to rot, as successive releases of Perl 5 make more and more of CPAN unusable.

It's Perl's standard library. Anyone new to Perl can quickly be productive, as there are modules for just about anything you might want to do. Most modules are well-documented and come with a testsuite.

CPAN is more than just a collection of distributions; you get: multi-platform testing of everything you release (CPAN Testers), and analytics on that; checking of how well your distributions follow conventions (CPANTS); a review and rating system (CPAN ratings); search engines (MetaCPAN and search.cpan.org); checking the coverage of your testsuites (CPAN Cover); discussion of your ideas before you release them (PrePAN); archival of all past versions (BackPAN).

It's a shared stone polisher: we upload our rough cuts, and together we knock them into shape, for all of our benefits.

It's Perl's bazaar: it was Perl's github before there was github.

You may argue that CPAN is all, some, or none of those things. But whatever you think, CPAN is as good as it is because most CPAN authors do a lot more than they strictly need to, to solve their own problem. Because they care, and they want to give back.

But it's more than that. CPAN isn't some system made by "them", which we contribute to. It's made by us, for us, and it can be whatever we want it to be.

I think one of the problems facing CPAN is that different people want it to be different things, and effectively end up pulling it in different directions. We have all these great systems and services built around CPAN, but they're not quite a harmonious whole. GENEHACK referred to our "patchwork legacy" in his keynote.

We don't have a shared vision for what we want CPAN to be, but I think it's time we did. It doesn't have to be just one of those things above. I'm intentionally not trying to address that here, but to ask some questions that we all might think about on CPAN Day.

What do you want CPAN to be? What CPAN are you prepared to put up with?

Thanks to BOOK, XSAWYERX, and GENEHACK, for their feedback on versions of this post.

Please enable JavaScript to view the comments powered by Disqus.

Disqus