Perl 「 モジュール 」cpan 利用前の準備 その 3 : local::lib で環境変数を設定 (0x93)
目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x93 回。
Perl 「 モジュール 」( module ) コマンド cpan を使うための準備。root ( システムディレクトリへの書き込み ) 権限を持たないユーザのために、モジュールのインストール先を変更する。
じぶんの領域 ( ローカルエリア ) にインストールしたモジュール local::lib を使って、今後のための環境変数をセットする。
local::lib をインストールした後の作業
前回「 Perl 「 モジュール 」cpan 利用前の準備 その 2 (0x92) 」で、ホームディレクトリに perl5/ というディレクトリが作成されていることを確認しました。
また、併せて .cpan/ というディレクトリも作成されていることを確認してください。
「 . 」から始まるファイル・ディレクトリを確認するときはコマンド ls にオプション -a を加えます。
前回「 perl Makefile.PL --bootstrap 」を実行した際にズラズラと表示された処理の大半は、このディレクトリ ./cpan の準備を行っていた様です。
ディレクトリ .cpan/ は、「 perl -MCPAN -e shell 」でモジュール CPAN.pm を初めて実行した時や、コマンドとしての cpan を初めて実行した時に、対話式のコンフィグレーションを経て作成されるものだと思っていましたが、local::lib のインストール時にも作成されるのですね。知りませんでした。
ディレクトリ ./cpan には、 CPAN の利用に関する各種設定やその他情報が格納されている様に見えます。
正確なところは追々確認して行きましょう。
local::lib を利用する
シェルのコマンドライン上で local::lib を使えば、任意のディレクトリをモジュールのインストール先に設定することが出来ます。
「初めての Perl 第 6 版」P.238 辺りでは、次の様に書いています。
他に何も指定せずにコマンドラインからこのモジュールをロードすれば, 設定される環境変数が表示されます:
*8 これについては, 私たち筆者を信じてください。コマンドラインスイッ チについては, まだ説明していませんが, perlrun ドキュメントにはそのすべてが解説されています。
$ perl -Mlocal::lib
export PERL_LOCAL_LIB_ROOT="/Users/fred/perl5";
export PERL_MB_OPT="--install_base /Users/fred/perl5";
export PERL_MM_OPT="INSTALL_BASE/Users/fred/perl5";
export PERL5LIB="...";
export PATH="/Users/fred/perl5/bin:$PATH";
これを僕の環境で試した結果は次の通りです。
$ perl -Mlocal::lib
Can't locate local/lib.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 .).
BEGIN failed--compilation aborted.
@INC に設定されたシステムパスに local::lib がないって怒られました。
はじめてこれを試した時点の僕は、例にある「 export 」の文字列が sh 系特有のものであることを知りませんでした。 また、@INC の理解もそれなりに微妙な状態でした。
つまり、エラーの意味も碌に理解出来なかったのです。
「 これで CPAN を使えるぞ 」期待にあふれてコマンドを実行した僕は少しの間泣きました。
local::lib を利用する 再び
上記を解決する方法として、僕は次の方法を採用しました。
*8 これについては, 僕を信じてください。コマンドラインスイッチやコマンド eval については, まだ説明していませんが, perlrun ドキュメントやインターネットではそのすべてが解説されています。
$ eval `perl -I$HOME/perl5/lib/perl5 -Mlocal::lib`
tcsh を利用しているあなたはコマンド env を実行してください。次の環境変数がセットされていることが確認出来るはずです。
PERL5LIB=/home/your/homedirectory/perl5/lib/perl5
PERL_LOCAL_LIB_ROOT=/home/your/homedirectory/perl5
PERL_MB_OPT=--install_base "/home/your/homedirectory/perl5"
PERL_MM_OPT=INSTALL_BASE=/home/your/homedirectory/perl5
設定を恒常的なものにする
上記の方法で設定した環境変数はあくまで一時的なものに過ぎないので、次の手順で恒常的なものにします。
$ echo 'eval `perl -I$HOME/perl5/lib/perl5/ -Mlocal::lib`' >> ~/.cshrc
$ source .cshrc
$ rehash
これは、コマンド perl とモジュール local::lib を使ったシステムパスの設定を、シェルの設定ファイル .cshrc に追記 ( >> ) しています。
つまり、これはログインするたびに実行される様になる訳です。
@INC を確認する
「 Perl 「 モジュール 」(0x8e) 」で確認した様に、プログラム中でモジュールを使う ( ライブラリファイルを使う ) 場合には、Perl の特殊な配列 @INC にリストされたシステムパスが検索されます。
ということは、@INC に今回設定したじぶんのホームディレクトリ配下のシステムパスがリストされていれば、プログラム中でじぶんの領域にインストールしたモジュールが使えるはずです。
@INC を確認してみましょう。
$ perl -e 'for ( @INC ) {print "$_\n" ; }'
/home/your/homedirectory/perl5/lib/perl5/amd64-freebsd
/home/your/homedirectory/perl5/lib/perl5
/usr/local/lib/perl5/5.8.9/BSDPAN
/usr/local/lib/perl5/site_perl/5.8.9/mach
/usr/local/lib/perl5/site_perl/5.8.9
/usr/local/lib/perl5/5.8.9/mach
/usr/local/lib/perl5/5.8.9
.
ん、行けそうです。
0x93 -> 0x94 へ
今回までで設定に利用した方法は、僕がインターネットを手探りしつつ、利用環境に合わせた方法です。
正直なところ色々と筋が悪い予感はしているのですが、今のところ新たなモジュールのインストールやその利用は行えています。
次回は、モジュールのインストールやその利用を改めてテストしてみます。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
関連記事