Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. モジュール
  3. here

perlbrew - ユーザー環境にPerlをインストールする

ユーザー環境にPerlをインストールするにはperlbrewというツールを使用します。システム標準のPerlを利用したくない場合や新しいバージョンのPerlを利用したい場合は便利です。またperlbrewを使うと複数のバージョンのPerlの切り替えを行うことができます。

perlbrewのインストール

以下のコマンドを実行します。

curl -L http://install.perlbrew.pl | bash

もしcurlコマンドがなければ、以下のコマンドを実行してみてください。

# Linux
wget -O - http://install.perlbrew.pl | bash

# FreeBSD
fetch -o- http://install.perlbrew.pl | sh

cpanから二つの手順でインストールすることもできます。

sudo cpan App::perlbrew
perlbrew init

次にperlbrewのパスを通しましょう。perlbrewで用意されているbash用の設定ファイルを「~/.bash_profile」に追加します(bashの場合)。

echo "source ~/perl5/perlbrew/etc/bashrc" >> ~/.bash_profile

そして、シェルを立ち上げなおします。

ユーザー環境へのPerlのインストール

ユーザー環境にPerlをインストールします。5.28.2のPerlをインストールしてみましょう。時間がかかるので待ちます(約30分程度)。

perlbrew install perl-5.28.2

インストールできない場合は、Perlのコンパイルに必要なツールが、まだインストールされていない可能性があります。以下のツールが必要になりますので、各環境に応じて、インストールしてください。

  • make
  • gcc
  • patch

試験を強制的に飛ばして強制的にインストールしたい場合は「-n」オプションを使用します。

perlbrew install -n perl-5.28.2

利用できるPerlの一覧を見てみましょう。perlbrewのlistコマンドを使用します。

perlbrew list

以下のように利用できるPerlが表示されます。アスタリスクのあるものが現在利用しているPerlです。

  perl-5.28.2
* /usr/bin/perl (5.8.8)

Perlを切り替えるにはperlbrewのswitchコマンドを使用します。

perlbrew switch perl-5.28.2

Perlのバージョンを実際に確認してみましょう。

perl -v

以下のように5.28.2のバージョンになっています。

This is perl 5, version 16, subversion 3 (v5.28.2) built for i686-linux

cpanmのインストール

モジュールをインストールするのに便利なcpanmもインストールしておきましょう。

perlbrew install-cpanm

これで以下のコマンドでモジュールがインストールできるようになります。

cpanm JSON

モジュールは以下のディレクトリなどにインストールされます。

/home/kimoto/perl5/perlbrew/perls/perl-5.28.2/lib/site_perl/5.28.2/

元のPerlに戻す

元のPerlに戻すには以下のようにします。

perlbrew off

perlbrewで指定したバージョンのPerlをcrontabで使う方法

perlbrewのはまりどころのひとつは、perlbrewで指定したバージョンのPerlがcronからは利用されないということでしょう。これはcronから実行するときは、シェルが起動されないので.bash_profileが読み込まれないことが原因です。perlbrewによる設定は、.bash_profileの中に記述したからですね。

一番簡単な解決策は、crontabの中でPATHを、そのユーザーが持っている環境変数PATHの値に書き換えてあげることです。

まずperlbrewをインストールしたユーザーで、PATH環境変数の値を表示します。

env | grep PATH

PATHを含んだ環境変数がいくつか表示されるので、PATHというものを探します。(ユーザー名がadminsの場合の例です。)

PATH=/home/admins/perl5/perlbrew/bin:/home/admins/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/admins/bin

以下のコマンドでcrontabを編集します。

crontab -e

そして上記のPATHの値をcrontabの一番上に書き込みます。

PATH=/home/admins/perl5/perlbrew/bin:/home/admins/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/admins/bin

# cronの設定が続く...

これでcronが指定したバージョンのPerlを利用してくれるようになります。

Perlスクリプトの一行目の記述

Perlスクリプトの一行目の記述は以下のようenvコマンドを使った記述をしましょう。

#!/usr/bin/env perl

こうすると設定したPATHの値から自動的にperlを検出してくれます。

この方法は、見てのとおり、PATHをベタ書きしますので、crontabの移植性がまったくないです。ユーザー名のadminsが直接埋め込まれていますし、perlのバージョン番号がそのまま記述されているので、perlbrewでバージョンを変更したときは、動かなくなります。

でもこの方法が一番よいと思います。その理由はcrontab内では、環境変数の変数展開ができないという制限があるので、うまく移植性を持たせることが難しいということが理由です。移植性を持たせると、記述量が多くなったり、追加のスクリプトが必要になったり、管理が煩雑になってしまいます。

それとどんなにがんばっても、crontabって環境ごとに、何らかの差分があることがほとんどなので、移植性を保たせてもあんまりメリットがないということもあります。