If you’ve seen me giving my “Kingdom of the Blind” lightning talk this year, then you’ll know that I’ve been hanging around places like the LinkedIn Perl groups and StackOverflow trying to help people get the most out of Perl. It can be an “interesting” experience.
One of the most frequent questions I see is some variant of “I have found this program, but when I try to run it I get an error saying it can’t find this module”. Of course, the solution to this is simple. You tell them to install the missing module. But, as always, the devil is in the detail and I think that in many cases the answers I seen could be improved.
Most people seem to leap in and suggest that the original poster should install the module using
cpan (advanced students might suggest
cpanminus instead). These are, of course, great tools. But I don’t think this is the best answer in to these questions.
In most cases, the people asking questions are new to Perl. In some cases they don’t even want to learn any Perl – they just want to use a useful program that happens to be written in Perl. I think that launching these people into the CPAN ecosystem is a bad idea. Yes, eventually, it would be good to get them using
cpanminus. But one step at a time. First let’s show them how easy it can be to use Perl.
In many of these cases, I think that the best approach is to suggest that they use their native package manager to install a pre-packaged version of the required module.
Yes, I know the system Perl is evil and outdated. Yes, I know that they probably won’t get the latest and greatest version of your CPAN module from
yum. And, yes, I know there’s a chance that the required module won’t be available from the package repositories. But I still think it’s worth giving it a try. Because in most cases the module will be there and available as a recent enough version that it will solve their immediate problem and let them get on with their work.
There are three main reasons for this suggestion:
- People in this situation will almost certainly be using the system Perl anyway. And the system Perl will already have pre-packaged modules installed alongside it. And installing modules using
cpanminusalongside pre-packaged modules in the same library installation is a recipe for disaster. The package manager no longer knows what’s installed or what versions are installed and hilarity ensues.
- The pre-packaged versions will know about non-Perl requirements for the CPAN module and will pull those in as well as other required CPAN modules. One of the most common requests I see is for GD or one of its related modules. Your package manager will know about the underlying requirement for libgd.
cpanminusand friends probably won’t.
- The user is more likely to be used to using their package manager. Teaching them about the CPAN ecosystem can come later. Let’s ease them into using Perl by starting them off with tools that they are familiar with.
I know that both Fedora/Centos/RHEL and Ubuntu/Debian have large numbers of CPAN modules already pre-packaged for easy installation. Let’s suggest that people make use of this work to get up and running with Perl quickly. Later on we can show the the power and flexibility that comes with using the Perl-specific tools.
Of course there’s then a debate about when (and how) we start to wean these people off of the system Perl and pre-build packages and on to
cpanminus/etc. But I think that having a community of people who are used to using CPAN modules (albeit in this slightly restricted manner) is an improvement on the current situation where people often avoid CPAN completely because module installation is seen as too difficult.
What do you think? Are there obvious errors in my thinking?