68
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perlと本気で向き合いたくない人のためのPerl5実行環境構築

Last updated at Posted at 2014-06-18

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

そのへんの判断はお任せします。

68
75
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?