CartonとcpanmでCPANモジュールをローカルインストールして使う

PerlCPANモジュールをローカルインストールして使うには、Cartonを使う。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.2 LTS
Release:        12.04
Codename:       precise

まず、apt等のパッケージマネージャでCPANのパッケージマネージャcpanmをインストールする。 また、XSモジュールを入れる際のコンパイルに必要となるmake等の開発コマンドも事前に入れておく。

$ sudo apt-get install build-essential
$ sudo apt-get install cpanminus

次に、cpanmを使って(グローバル環境に)Cartonをインストールする。

$ sudo cpanm Carton

適当なディレクトリに移動し、cpanfileという名前のファイルにインストールするモジュールを書く。 cpanfileの書式については次を参照する。

$ mkdir test
$ cd test
$ vi cpanfile
$ cat cpanfile
requires 'Path::Class', '0.32';

そして、次のコマンドを実行すると、./local/以下にモジュールがインストールされる。

$ carton install
Installing modules using cpanfile
Successfully installed Path-Class-0.32
1 distribution installed
Complete! Modules were installed into local

Makefile.PLにオプションを指定しなければならない等の理由によりインストールが失敗する場合は、cpanmの--lookオプションを利用して手動でインストールを行う。 ただし、このとき合わせて-Lオプションでローカルインストール先のディレクトリ(./local/)を指定する必要がある。

$ cpanm -L local --look Foo::Bar
$ perl Makefile.PL --foo=bar
$ make
$ make test
$ make install

あとは、コマンドの先頭にcarton exec --をつけて実行することでローカルインストールしたモジュールが使用される。

$ carton exec -- perl -MPath::Class -e 'print file("cpanfile")->slurp();'
requires 'Path::Class', '0.32';