イントラネット(非インターネット環境)でも依存関係解決してperlモジュールを入れる方法

コマンドはcartonだが、モジュール名は大文字から始まる
$ cpanm Carton

とりま、インターネット環境でファイルを2つ作成する

入れたいモジュールを書く
$ echo "requires 'Furl';" > cpanfile

モジュールを実行するファイルを作る
$ cat > furl.pl
use strict;
use warnings;
use Furl;
(Ctrl + D)

あとはinstallでDLされる
$ time carton install
Installing modules using /home/ymko/tmp/cpanfile
Successfully installed CPAN-Meta-YAML-0.011
Successfully installed Test-Simple-1.001002
Successfully installed JSON-PP-2.27203
Successfully installed Parse-CPAN-Meta-1.4411
Successfully installed parent-0.228
Successfully installed version-0.9908 (upgraded from 0.77)
Successfully installed Scalar-List-Utils-1.38 (upgraded from 1.21)
Successfully installed CPAN-Meta-Requirements-2.125
Successfully installed CPAN-Meta-2.133380
Successfully installed Module-Metadata-1.000019
Successfully installed Perl-OSType-1.007
Successfully installed Locale-Maketext-Simple-0.21
Successfully installed Module-Load-0.30
Successfully installed Module-CoreList-3.04
Successfully installed Params-Check-0.38
Successfully installed Module-Load-Conditional-0.62
Successfully installed IPC-Cmd-0.92
Successfully installed ExtUtils-CBuilder-0.280212
Successfully installed ExtUtils-ParseXS-3.22 (upgraded from 2.2002)
Successfully installed Module-Build-0.4205
Successfully installed Time-HiRes-1.9726
Successfully installed Class-Accessor-Lite-0.06
Successfully installed HTTP-Parser-XS-0.16
Successfully installed Mozilla-CA-20130114
Successfully installed Furl-3.01
25 distributions installed
Complete! Modules were installed into /home/ymko/tmp/local

real    1m11.823s
user    0m38.978s
sys     0m8.183s

$ ll
合計 24
-rw-r--r-- 1 ymko users   18  2月 17 19:52 2014 cpanfile
-rw-r--r-- 1 ymko users 9624  2月 18 01:47 2014 cpanfile.snapshot
-rw-r--r-- 1 ymko users   37  2月 18 01:23 2014 furl.pl
drwxr-xr-x 5 ymko users 4096  2月 18 01:46 2014 local

もうcpanmでローカル環境に入ってるのでエラーにならない
$ perl furl.pl

システムモジュールだけで(ローカルモジュールを使用しないで)実行確認
$ carton exec -- perl furl.pl

システムモジュールだけなら当然不足するのでエラー
$ mv local{,.bak}
$ carton exec -- perl furl.pl
Can't locate Furl.pm in @INC (@INC contains: /home/ymko/tmp/local/lib/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at furl.pl line 4.
BEGIN failed--compilation aborted at furl.pl line 4.
$ mv local{.bak,}

あとはlocal/cacheとcpanfile.snapshotを持っていき、以下のコマンドで完成
$ carton --deployment --cached
Installing modules using /home/ymko/tmp/cpanfile (deployment mode)
...
  • bundleコマンドでDLできるらしい。