Para el desarrollo, instalo mi propio Perl y dejo el sistema Perl solo. Si quiero actualizar el sistema Perl, uso el administrador de paquetes del sistema. Para mi desarrollo Perl, uso la herramienta cpan.
Como los mantengo separados, nunca debería estropear el Perl que el sistema necesita para sus tareas de mantenimiento y demás, pero no tengo que depender de las decisiones de desarrollo del sistema.
Es muy fácil instalar Perls por separado. Cuando ejecuta Configurar desde la distribución de origen, le preguntará dónde desea instalar todo. Dale cualquier camino que te guste. Tengo muchos Perls instalados en /usr/local/perls, por ejemplo, y todo para cada instalación vive por separado. Luego hago enlaces simbólicos en /usr/local/bin para ellos (por ejemplo, perl5.8.9, perl.5.10.0, perl5.10.0-threaded). Cuando quiero una versión particular, sólo tiene que utilizar la que yo quiero:
$ perl5.10.0 program.pl
El binario particular, garantiza que el programa recoge la ruta de búsqueda de módulo de la derecha y así sucesivamente (que es lo mismo en el Config.módulo pm para ese binario).
Aquí hay un script que utilizo para crear los enlaces simbólicos. Se ve en el directorio bin, se da cuenta de la versión de Perl, y hace enlaces como cpan5.10.1
y así sucesivamente. Cada programa ya conoce el perl correcto para llamar:
#!perl
use 5.010;
use strict;
use warnings;
use File::Basename;
use File::Spec::Functions;
my $perls_directory = catfile(
$ARGV[0] // '/usr/local/perls',
'perl*'
);
die "$perls_directory does not exist!\n"
unless -d dirname $perls_directory;
my $links_directory = $ARGV[1] // catfile($ENV{HOME}, 'bin'); #/
die "$links_directory does not exist!\n" unless -d $links_directory;
foreach my $directory (glob($perls_directory))
{
say "Processing $directory...";
unless(-e catfile($directory, 'bin'))
{
say "\tNo bin/ directory. Skipping!";
next;
}
my @perls = glob(catfile($directory, qw(bin perl5*)));
my($perl_version) = $perls[0] =~ m/(5\.\d+\.\d+)\z/;
say "\tperl version is $perl_version";
foreach my $bin (glob(catfile($directory, 'bin', '*')))
{
say "\tFound $bin";
my $basename = basename($bin);
my $link_basename = do {
if($basename =~ m/5\.\d+\.\d+\z/) { $basename }
else { "$basename$perl_version" }
};
my $link = catfile($links_directory, $link_basename);
next if -e $link;
say "\t\tlinking $bin => $link";
symlink $bin => $link or
warn "\t\tCould not create symlink [$!]: $bin => $link!";
}
}
Todo se instala en el lugar correcto para ese Perl en particular.
También he estado pensando que debería poner esos directorios Perl bajo algún tipo de control de fuente. Si agrego un módulo que no me gusta, retrocedo a una revisión anterior. Sin embargo, estoy empezando a hacer eso y no he jugado mucho con eso.
He escrito más sobre este tipo de cosas en el blog Perler efectiva:
He cambiado el título de "¿Cómo manejas los módulos de Perl en Linux?" a "¿Cómo gestionas TU módulos Perl cuando utilizas un administrador de paquetes?", ya que esto es relevante en cualquier sistema en el que se haya usado un administrador de paquetes para instalar Perl, no estrictamente Linux, por ejemplo, la distribución de macports (http://macports.org) para OSX. – Ether