Perlと本気で向き合いたくない人のためのPerl5実行環境構築
非PerlプログラマがとりあえずいろいろCPANモジュールを必要とするPerlプログラムを走らせるための環境構築法について書きます。
以下のような方を対象としています。
- Perlが嫌いな方
- Perlは時代遅れなので即刻滅ぶべきと思っている方
-
@_
とか見るとヘドが出そうになる方 - にも関わらず、 のっぴきならない理由からPerlプログラムを使わないといけなくなってしまった方
なお、ここでは"Perl"とはPerl5のことを指します。
Perl実行処理系の確認
UNIX系OSならばだいたいperlがインストール済みのはずです。
$ perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi
(with 41 registered patches, see perl -V for more detail)
申し訳ありませんが、デフォルトでPerlが入ってない環境(Windowsとか)はよく分からないのでここでは対象外とします。WindowsはPerlと本気で向き合いたい人向けのOSだと思ってます。
以下では、特に断りがない限りOSとしてUbuntuを想定します。
必要なCPANモジュールを見極める
CPANモジュールはPerlのライブラリモジュールです。たいていのPerlプログラムはいろいろなCPANモジュールを使ってます。
CPANモジュールは"Text::CSV"みたいに"::"で区切られた名前になってます。
もし、あなたがゴニョゴニョしたいPerlプログラムのソースツリーにMakefile.PL
とかBuild.PL
とかcpanfile
とかのファイルがあったらちょっとガマンして中を見てみましょう。
PREREQ_PM
とかrequires
とかのキーワードのそばに、必要なCPANモジュールが書いてあるはずです。
上記のファイルがないものの実行可能なスクリプトがあるのなら、試しに実行してみましょう。
Can't locate Text/CSV.pm in @INC (you may need to install the Text::CSV module) (@INC contains: (以下略)
例えばこんな感じのエラーが出たらText::CSVモジュールが必要だということです。
OSのレポジトリからCPANモジュールをインストールする
Perlと本気で向き合いたくないのなら、OSの提供するパッケージレポジトリからCPANモジュールをインストールするのが無難です。
例えば、DebianやUbuntuでは"lib*-perl"という名前のパッケージがCPANモジュールです。
$ sudo apt-get install libtext-csv-perl
RPMパッケージだと"perl-*"という名前になってるみたいです。
# yum install perl-Text-CSV
とりあえず、よく使われるモジュールは先にインストールしちゃうのも手です。例えばこんな感じに。
$ sudo apt-get install lib{anyevent,class-accessor-lite,crypt-ssleay,datetime,dbd-sqlite3,dbd-mysql,dbd-pg,dbi,dbix-class,\
extutils-parsexs,file-homedir,file-sharedir,file-spec,ipc-run3,json,module-build,module-install,\
mojolicious,moo,moose,mouse,net-ssleay,path-class,plack,test-exception,test-fatal,test-requires,test-warnings,\
tie-ixhash,try-tiny,uri,uri-encode,www,xml-libxml,yaml}-perl
(注) このモジュールの選択は独断と偏見に基づいています。
もちろん、全てのCPANモジュールがdebやRPMパッケージになってるわけではありません。必要とするCPANモジュールがレポジトリにない場合、CPANから直接インストールする必要があります。
cpanmをセットアップする
CPANから直接CPANモジュールをインストールするにはcpanm
コマンドを使います。これは"cpanminus"とも呼ばれています。
また、C言語のコンパイラやmake
コマンドなども必要になるので、このへんのものをインストールします。
$ sudo apt-get install build-essential cpanminus
あと環境変数を設定します。
$ export PERL5LIB="$HOME/perl5/lib/perl5:$PERL5LIB"
$ export PATH="$HOME/perl5/bin:$PATH"
ユーザー権限でインストールしたCPANモジュールは~/perl5
以下に配置されるので、そこへパスを通しているわけです。.profileファイルなどにも書いておくといいでしょう。
また、プロキシ設定が必要な人はhttp_proxy
環境変数を設定しておきましょう。
$ export http_proxy="http://my-proxy.example.com:8080"
cpanmでCPANモジュールをインストールする
PerlプログラムのソースツリーにMakefile.PL
とかBuild.PL
とかcpanfile
とかのファイルがあったらラッキーです。これらのいずれかのファイルがあるディレクトリで以下を実行して下さい。
$ cpanm --installdeps .
cpanm
は賢いので必要なCPANモジュールを全て拾ってインストールしてくれます。
上記のファイルがないなら手動でCPANモジュールを指定してインストールします。
$ cpanm Text::CSV JSON
複数のモジュールをいっぺんに指定できます。
うまくいけば、あとは放っておけば依存する全てのCPANモジュールを勝手にインストールしてくれます。
ビルドやテストに失敗したら?
cpanm
はCPANモジュールのダウンロード、ビルド、テスト、インストールを行いますが、ビルドやテストに失敗することがあります。
そういう時はとりあえず何も考えずにもう一回やってみて下さい。
$ cpanm Text::CSV JSON
意外とこれでうまくいったりもします。
C言語のコードを含むモジュールの場合、必要なライブラリがなくてインストールに失敗している可能性が高いです。~/.cpanm/build.log
にビルドログがあるので見てみましょう。
例えば、うかつにNet::SSLeay
とかインストールしようとするとエラーを食らいます。~/.cpanm/build.log
を見てみると、
SSLeay.xs:163:25: fatal error: openssl/err.h: そのようなファイルやディレクトリはありません
とか言われてるので、SSLライブラリヘッダをインストールしましょう。
$ sudo apt-get install libssl-dev
この後、もう一度cpanm
すればインストールできるはずです。
これでもエラーが出るようならそろそろPerlと本気で向き合ってる人を呼んでくるべきかもしれません。一応、~/.cpanm/build.log
のビルドログを送りつけてみるといいでしょう。
まあPerlと本気で向き合いたくないのであれば軽い気持ちでエラーを無視してもいいでしょうし、
$ cpanm -f Text::CSV JSON
そもそもテスト回すと時間かかってダルいのでテストを省略しちゃうとか。
$ cpanm -n Text::CSV JSON
そのへんの判断はお任せします。