camel

気がつかなかった。

bulknews.typepad.com: Mac OS X Security Update 2009-001 might break your Perl (CPAN)
A couple of my friends on IRC have told me this, and since I'm using 10.4.11 I couldn't verify, but the latest Mac OS X Security Update 2009-001 apparently breaks your Perl, if you
  • are using Mac OS X 10.5 (Leopard)
  • and are using Perl that comes with Mac OS X
  • and have upgraded several core modules with CPAN in the past

気がつかなくてもいいよう手配しているので。

なぜか、というと、Perlは/usr/bin/perlではなく/usr/local/bin/perlを自分で作って使用しているから。OS X に限らず、/usr以下(もちろん/usr/localは除く)、というか「システムが使う」ソフトウェアはなるべくいじりたくない、ということもあるし、さらに以前 404 Blog Not Found:perl - LWPあれこれ で書いたように、OS X の場合、LWPのHEADコマンドが/usr/bin/HEADを上書きするリスクがあるということもある。

で、自前で perl をインストールする方法だけど、実に簡単。Xcodeをインストールしておいてから、Terminalから以下のようにすればいい。

curl -O http://www.cpan.org/src/perl-5.10.0.tar.gz
tar zxvf perl-5.10.0.tar.gz
cd perl-5.10.0
sh Configure -DDEBUGGING -Doptimize='-g -pipe -Os' -Dusethreads -Dusemultiplicity -des
make
sudo make install

ちなみに現時点における Leopard の /usr/bin/perl

sh Configure -ds -e -Dprefix=/usr -Dccflags='-g -pipe' -Dldflags=-Dman3ext=3pm -Duseithreads -Duseshrplib

としてコンパイルされているが、これだとコマンドラインの-Dスイッチが効かないし、Perl本体を shared library にする(OS X用語だと dynamic library) -Duseshrplib は、指定しない方が perl の起動が高速になる。

あとは環境変数PATH/usr/local/binが入っているのを確認の上、今までどおり使えばいい。そうそう。csh系のshellを使っている人は、rehashをお忘れなく。

これで、/usr/local/bin/perl が my perl になる。cpanがインストールする諸々も、当然/usr/localがprefixになるので、システムが使うファイルを間違って上書きする心配もほぼなくなる。

一時的にプリインストール版を使う時には、perlではなく/usr/bin/perlを明示的に指定すればいい。例えば私は Encode のテストをする時には必ず

perl Makefile.PL

だけではなく

/usr/bin/perl Makefile.PL

もやっている。それでも下位互換性をチェックしきれないこともあるけど。

MacPortsを使うという手もある。が、perl は CPAN という自前のパッケージ管理システムを持っているので、 perl の事はなるべく perl にまかせたいということもあって、私は/usr/local/bin/perlをデフォルトの perl にしている。

Dan the (Perl Monger|Mac OS X User)

追記:

今迷っているのは、ruby 1.9.1 をどこにインストールするか。/usr/localにインストールしちゃっていいのかなぁ。ここまで勇気ないし