OSで標準で入っているPerl(system perl)は、いくつかのツールから依存しているケースもあり、 アプリケーションを多数ホストするのは、適切でない場合があります。 開発で利用するPerlインタプリターは、開発用に独立していた方がよいところです。 また、複数のバージョンで動作を確認出来る事も望ましいですね。 そこで、ここではplenvを使い、Perlインタプリターを1つのOS内に複数のバージョンをインストールし、管理してみます。
plenvをインストールにはいくつかの方法があります
CPANからの場合
$ sudo /usr/bin/perl -MCPAN -e shell
install App::plenv
homebrewからの場合
$ brew install plenv
githubからの場合(plenv開発速いし、githubから入れるのがベスト)
$ git clone git://github.com/tokuhirom/plenv.git ~/.plenv
plenvのインストールが完了したら、いくつかshell(bashの例)に設定します
$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(plenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
インストール可能なPerlバージョンの表示
$ plenv available
Perl 5.16.3をインストール
$ plenv install 5.16.3
通常 ~/.plenv/versions/5.16.3 にインタプリターがインストールされます。
しかもデフォルトではPerlソースに付属しているtestが走りません
テスト(make test)を実行したい場合は、--test オプションを追加する
インストールしたPerlインタプリタを削除したい場合は?
~/.plenv/versions以下のperlバージョンをごっそり削除するだけでいいみたいです
globalなインタプリタを指定
$ plenv global 5.16.3
localなインタプリタを指定(あるディレクトリで実行した場合)
$ plenv local 5.14.3
$ ls
.perl-version
localの場合は、.perl-versionファイルがそのディレクトリにできています。 この中に、指定したPerlのバージョンが記載されています。 localしたディレクトリで、perl -v して見てください。
少し進んだ使い方
asオプションで複数の同バージョンを別名で入れたい時やビルドオプションを変えたい時に使えます
$ plenv install 5.16.3 -Dusethreads --as=perl516i
ithreadsはplenvでインストールした時も通常では入りません。
インタプリタのビルド時に、ビルドオプションを渡しましょう(-Dusethreads)
ithreadsについては、2009年の記事ですが、tokuhiromさんの記事が有用かと思います。
http://blog.64p.org/entry/20090629/1246239835
インストールしたモジュールの移動 plenvを使えば, 異なるバージョンのperl間でモジュールを移動することができます。 例えば, あるプロダクトの開発環境をperl-5.14.4から新しくインストールしたperl-5.16.3に変更するような場合 下記の要領で、5.16.3側にモジュールを移行できるようです。
$ plenv migrate-modules 5.14.4 5.16.3
asオプションを使い、定期的にアップデートする
asオプションを使って、インストールする時に、マイナーバージョンを含めないように名前付けします。 (例: あえて、低いマイナーバージョンをインストール) (--as=perl-5.16とか-含めると使えない
$ plenv install 5.16.1 --as=perl516
マイナーバージョンをアップグレード(バイナリ互換あり)
$ plenv install 5.16.3 --as=perl516 --force
plenv 1.5.0からの追加機能(2013-05-17 released!)
plenv install -j 4 5.18.0-RC4 -DDEBUGGING=-g がオススメです。
plenv install 5.18.0-RC4 -DDEBUGGING=-g -j 4 か
~/.plenv/build/ が build directory になった
なお、plenv関係の記事は、plenv作者tokuhiromさんと、papixさんの記事が大変有用です。
http://blog.64p.org/entry/2013/01/23/081834
http://blog.papix.net/entry/2013/01/21/210327
Perlには、標準でCPANモジュールを管理するcpanコマンドが付属していますが、 CPANに加え、githubからのインストールや、バージョン指定インストール、など 便利な機能が満載でかつ使いやすい cpanm(App::cpanminus) をインストールしてライブラリを管理します。
cpanmをplenvからインストール
$ plenv install-cpanm
cpanm自体が古くなるなど、アップグレードしたい場合
$ cpanm --self-upgrade
cpanmでモジュールをバージョン指定してインストールするなども可能です
( モジュール名@バージョン番号を指定する 例)
$ cpanm Mojolicious@3.95
その他、cpanmの詳しい使い方は、perldoc cpanm して、ドキュメントを見てみてください。
下記rehashは、plenv-v1.4.0以降から不要になりました
何かcpanm経由でインストールした時には、rehashして状態を認識させる必要があります。
そうでないと、インストールしたモジュールのコマンドなどが反映されないので多少注意が必要です。
$ plenv rehash
CPANモジュールを複数インストールしたい時など、cpanfileというファイルで管理すると大変楽になります。 cpanfileでは、モジュール名と、バージョンを記述します。
requires 'Mojolicious', '== 3.95';
requires 'Proclet', '0';
指定したモジュールを、cpanmでインタプリターglobalにインストールします。
$ cpanm --installdeps .
cpanfileのモジュールバージョンは、下記の様な指定ができます。
'0' 指定無し
'1.00' 以上
'== 1.00' 固定
'!= 1.00' 以外
'>= 1.00' 以上
'<= 1.00' 以下
'> 1.00' 超過
'< 1.00' 未満
cpanfileについては、下記の記事が有用です。
http://www.slideshare.net/aloelight/cpanfile
参考 http://blog.livedoor.jp/lestrrat-practical_modern_perl/archives/25002846.html
今までのcpanmでのモジュールインストールは、Perlインタプリターのglobal領域(site_perl) にインストールするものでした。 しかし、Perlアプリケーションを多く作って行くようになると、同じモジュールを利用していても、 個々のアプリケーションで使用するバージョンを変えたい、などのケース出てきます。 その様な場合、Cartonを使い、Perlインタプリターglobalではなく、アプリケーションlocalにモジュールを インストールすることで対応する事ができます。
Cartonをインストール
$ cpanm Carton
次に、インストールしたいモジュールをcpanfileを用いて作成します。
$ cat cpanfile
requires 'Mojolicious', '== 3.95';$ carton install
Successfully installed Mojolicious-3.95 1 distribution installed Complete! Modules were installed into local
となり、local/以下に実行コマンド含め、モジュール全てがインストールされます。 また、carton.lockというファイル, .cartonディレクトリも作成されます。 cpanfileとcarton.lockはバージョン管理ツールで管理するようにします。
$ git add cpanfile carton.lock
carton経由でMojoliciousを起動してみます
$ carton exec -- morbo myapp.pl
localで動作確認できましたね! では、これらをバージョン管理に追加し、pushします。その後デプロイしてみましょう。
$ git clone mojotest
$ cd mojotest
$ carton install
Installing modules using carton.lock (deployment mode)
Successfully installed Mojolicious-3.95
1 distribution installed
Complete! Modules were installed into local
この様にCartonは、開発時cpanfileからインストールを行い、デプロイ時はcarton.lockからインストールを行います。
依存モジュールをネットワークからインストールするのではなく、あらかじめバンドルしておく事もできます。 carton bundle
http://blog.64p.org/entry/2013/02/07/113231
$ carton bundle
Bundling modules using cpanfile
Mojolicious-3.95
Complete! Modules were bundled into /Users/masakyst/tmp/perl/cart/local/cache
すると、local/cacheにtarをぶっ込んでくれる git add local/cache しておく
デプロイ時には、
$ carton install --cached
すると、ちゃんとlocal/cacheからインストールされているのがわかる
tail -f ~/.cpanm/build.log
Working on Mojolicious
Fetching file:///
不要かな
ackというPerl製のソースコードの検索ツールがあります。(find, grepのような)
ackのインストール
$ cpanm App::Ack
ack2.0のメジャーバージョンアップで,1系と変わった箇所もあるので、良く確認したほうがよさそうです。
ろくにvim pluginも使ってないし、sublime textも使ってない状態
Perlにも、Rubyのirbの様なインタファクティブシェルがいくつかあります。
iperl(App::REPL) ベストと思いきや、評価順序に難あり?
などがありあます。 個人的におすすめなのは、標準のperldebuggerです。
$ perl -de 1
とすると、対話的にPerlコードが実行できます。 .bashrcなどにaliasしておくと、それなりにいい感じになります。
alias ipl='rlwrap perl -de 1'
http://perl-users.jp/articles/advent-calendar/2009/casual/09.html
perl hacksかperl bestpracticeにも書いてある
Perl製のPerl専用IDEがあります。
詳しくは、charsbarさんの記事が良いです。 http://gihyo.jp/dev/serial/01/modern-perl/0017
cpanm Padre
Padre requires a perl built using threads!!!!!!(-Dusethreadsしないとだめ
! Installing the dependencies failed: Module 'Debug::Client' is not installed ! Bailing out the installation for Padre-0.98. Retry with --prompt or --force. 105 distributions installed
という事で、Debug::Clientがmacだと0.25はいらない 最近良くアップデートされている