/usr/local に my perl を入れてみる。
最新の perl のソースを取ってきて、 オプション付けて Configure して、 make して、 sudo make install すれば、 いいだけ。

Snow Leopard になってから、そういうことをする必要がなくなったかもしれない。
(もちろん、2系統にしておいてまずいことはなにもない)

まず、MaxOSX Snow Leopard のシステムの perl はどんな感じ?

% perl -V

してみると、Configure の オプションは

config_args='-ds -e -Dprefix=/usr -Dccflags=-g -pipe -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=gcc-4.2'

らしい。このオプションを尊重して my perl を /usr/local に入れてみる。

% ftp ftp://www.cpan.org/src/latest.tar.gz
% tar xzvpf latest.tar.gz
% cd perl-5.10.0
% sh Configure -ds -e \
-Dprefix=/usr/local \
-Dccflags='-g -pipe' \
-Dldflags=-Dman3ext=3pm \
-Duseithreads \
-Duseshrplib \
-Dinc_version_list=none \
-Dcc=gcc-4.2
% make
% sudo make install
% setenv PATH /usr/local/bin:${PATH}
% rehash

環境変数 PATH で /usr/local/bin を /usr/bin より先にしておくことで、
perl は /usr/local/bin/perl が
cpan は /usr/local/bin/cpan が
使われることになる。
標準モジュールは
/usr/local/lib/perl5/5.10.0 に入る。
/usr/local/bin/cpan でモジュールを install すれば
/usr/local/lib/perl5/site_perl/5.10.0 に入る。

Snow Leopard になってから、 システムの /usr/bin/cpan でモジュールを install しても、

/System/Library/Perl/5.10.0
/System/Library/Perl/Extras/5.10.0

には入らなくて

/Library/Perl/5.10.0
/Library/Perl/Updates/5.10.0

に入る。 /Library/Perl/Updates ディレクトリが新設され、 システムの /usr/bin/cpan は、システムの標準モジュールを上書きしないようになった。

In the module search order (@INC), this directory comes before the system perl directory, so modules installed here can be used to update perl-standard modules. The installprivlib Config parameter is now set to this directory, so that (for instance) setting INSTALLDIRS=perl will cause modules to be install here

独自オプションで make した perl を使う目的でもなければ、 perl を別に用意する必要は特に無くなったと思う。

ようするに

Modules installed after Perl was build
are stored in the site_perl subdirectory
of the Perl library. (PP3-553)

標準モジュールの場所
/usr/local/lib/perl5/5.10.0
/System/Library/Perl/5.10.0

その他のモジュールの場所
/usr/local/lib/perl5/site_perl/5.10.0
/Library/Perl/5.10.0

問題なのは、
普通の cpan で標準モジュールを入れる場合、
どこに入るかということ。
/usr/local/lib/perl5/5.10.0 を上書きする?
/usr/local/lib/perl5/site_perl/5.10.0 に入る?
MacOSXの場合なら、
/System/Library/Perl/5.10.0 を上書きする?
/Library/Perl/5.10.0 に入る?
これがよくわからない。

すくなくとも、MacOSX Leopard の cpan は、
システムの標準モジュールを上書きしていた。

だから XSLoader 問題が発生した。
MaxOSX Snow Leopard の cpan  は 
標準モジュールを /Library/Perl/5.10.0/Updates
他のモジュールを /Library/Perl/5.10.0
へ入れるようになったので、
システムの標準モジュールが上書きされることはなくなった。
これで XSLoader 問題も回避されるようになった。

/System/Library/Perl/Extras/5.10.0 は何か。 標準モジュール以外のもので、 MacOSX が (Xcode が) 用意したものが入っているディレクトリ。 普通の場合の /usr/local/lib/perl5/site_perl に相当するディレクトリ。 昔の cpan で入れたものは Extras へも入っていたみたいだから、 Snow Leopard の Extras に最初なにが入っていたかということは、 僕の Extras だと、ぱっと見てわからない。 timestamp を見ればわかるけど。 アップグレードの前に Extras を mv しておくべきだった。

CPAN モジュールを手で入れる方法

モジュールを好きな場所に入れたいなら、 by hand で perl Makefile.PL にオブション付けて create a Makefile してみるのも趣きがある。

モジュールを
get して
decompress して
unpack して
build して
install すればいいだけ。

the perlmodinstall manpage を読んでみる。

% man perlmodinstall

CPAN shell の get で目的のモジュールをダウンロードしたら、 CPAN shell を quit して、 ~/.cpan/build の該当するディレクトリに行って build してみる。

% cpan
cpan> get Foo
cpan> quit
% cd ~/.cpan/build/Foo
% perl Makefile.PL PREFIX=/my/dir/perllib
% make
% make test
% make install

参考

installprivlib を Spotlight で検索してみる。
manpage を読んでみる。

% man ExtUtils::MakeMaker
% man Module::Build

備考

Mac OS X に限らず、 perl のモジュールをインストールするには cpan を使うのが筋。 perl とは cpan のことだと言っても過言ではない。 cpan はシーパンと読むのが普通。

topic: perl
first posted: 2009-09-23 14:04:39
last modified: 2009-09-25 13:46:06