開発のために、私は独自の Perl をインストールし、システムの Perl はそのままにしておきます。システム Perl をアップグレードする場合は、システム パッケージ マネージャーを使用します。Perl の開発では、cpan ツールを使用します。
私はそれらを別々に保管しているので、システムが保守タスクなどに必要とする Perl を台無しにすることは決してありませんが、開発のためにシステムの決定に依存する必要はありません。
個別の Perl をインストールするのは非常に簡単です。ソース ディストリビューションから Configure を実行すると、すべてをインストールする場所を尋ねられます。任意のパスを指定してください。たとえば、/usr/local/perlsに多くの Perl がインストールされており、各インストールのすべてが個別に存在します。次に、それらのシンボリック リンクを/usr/local/binに作成します (たとえば、perl5.8.9、perl.5.10.0、perl5.10.0 スレッド)。特定のバージョンが必要な場合は、必要なバージョンを使用します。
$ perl5.10.0 program.pl
特定のバイナリは、プログラムが正しいモジュール検索パスなどを取得することを保証します (これは、そのバイナリの Config.pm モジュールと同じものです)。
シンボリックリンクを作成するために使用するスクリプトを次に示します。bin ディレクトリを調べて、Perl のバージョンを割り出し、のようなリンクを作成cpan5.10.1
します。各プログラムは、呼び出す適切な perl を既に認識しています。
#!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!";
}
}
その特定の Perl の適切な場所にすべてがインストールされます。
また、これらの Perl ディレクトリを何らかのソース管理下に置くべきだとも考えていました。気に入らないモジュールを追加すると、以前のリビジョンに戻るだけです。私はそれをやり始めたばかりで、あまり遊んでいません。
この種のことについては、Effective Perler ブログで詳しく書いています。