Perl のモジュールをインストールする方法

公開日:
更新日:
0Perl

Perl のモジュールとは



Don’t reinvent the wheel, just realign it.
(車輪の再発明はするな、ただ調整すれば良い。)

Anthony J. D'Angelo


Perl のモジュールとは、プログラムのパーツの一部を切り出したもので、ある 1 つの機能として再利用できます。他のプログラミング言語では "ライブラリ" や "クラス" などと呼ぶ場合がありますが、Perl ではモジュールと呼びます。例えば、日付を計算するプログラムが必要である場合、自分で最初から作る必要はありません。Perl には日付を計算する "DateTime" というモジュールが標準で用意されているからです。このように最初から用意されているモジュールを "標準モジュール" と呼びます。標準モジュールに含まれていないモジュールは、"CPANモジュール" や "外部モジュール" などと呼びます。


モジュールはアプリケーションのようなものです。標準モジュールは、最初から Perl にインストールされているため、呼び出せばすぐに使えます。一方、CPAN モジュールはインストールされていないため、対象のモジュールをダウンロードしてインストールを行う必要があります。インストールの方法は、Windows のようにグラフィカルでボタンをクリックするようなインストール方法ではなく、コマンドラインから文字列を打ち込むインストール方法であるため、複雑に感じます。最初は戸惑うかもしれませんが、数回の手順を踏めば完了するため徐々に慣れていくと思います。

Perl の "パッケージ" と "モジュール"

"パッケージ""モジュール" は、プログラムの空間における重要な要素です。


パッケージは、変数名やサブルーチン名といった、名前の重複を防ぐための仕組みです。プログラムには空間があり、1 つの空間では同じ名前の変数やサブルーチンを定義することはできません。この空間を定義できるのがパッケージとなります。


# パッケージ名 pkg1 の宣言
package pkg1;
$value1 = "foo1";
$value2 = "foo2";

# パッケージ名 pkg2 の宣言
package pkg2;
$value1 = "bar1";
$value2 = "bar2";
 パッケージのサンプルコード 1

上記のコードでは、"$value1""$value2" が重複していますが、パッケージを分けているためエラーにはなりません。また、パッケージの範囲は、次のパッケージが現れるまでが範囲となるため、明示的に終了を宣言する必要はありません。パッケージが分かれている "$value1""$value2" を区別して呼び出すためには、以下のように記述します。


# pkg1 の $value1 を呼び出す
print $pkg1::value;

# pkg2 の $value1 を呼び出す
print $pkg2::value;
 パッケージのサンプルコード 2

モジュールは、パッケージを再利用可能にしたものです。使用頻度の高いモジュールは、標準モジュールで提供されていますが、その他のモジュールは CPAN で提供されています。CPAN で提供されているモジュールをインポートしたとき、同じ空間内に同じ名前の変数やサブルーチンが含まれていることを避けるためにパッケージを使用しています。

Perl のモジュールの使い方

Perl でモジュールを使うには use 文でモジュールを使えるように (include) します。(Perl のバージョンが 5 以上で使えます。)use 文は、スクリプト実行前のコンパイル時に評価されます。モジュールが実行されることで、モジュールで定義されているサブルーチンがインポートされて使用可能になります。以下のコードでは、DateTime のモジュールを use 文で使えるようにしています。


# DateTime モジュールを使って現在の日時を取得するサンプルコード
use DateTime;
my $dt = DateTime->now( time_zone=>'local' );
 DateTime モジュールを使って現在の日時を取得するサンプルコード

また、use 文の引数として インポートしたいサブルーチン名を qw で指定できます。qw を指定した場合、それ以外のサブルーチンをインポートしません。また、複数のサブルーチンを指定する場合は、スペースで区切って指定します。


# モジュールから指定のサブルーチンのみインポートする
use モジュール名 qw(サブルーチン名1 サブルーチン名2);
 モジュールから指定のサブルーチンのみインポートするサンプルコード

use 文と似ている機能に require 文があります。require 文は、コンパイル時には評価されず、スクリプト実行時に評価されます。そのため、実行時に逐次呼ばれるため、必要なときに必要な分だけメモリをロードする制御が可能になります。以下のコードでは、条件に一致した場合、オリジナルのモジュールを require 文で使えるようにしています。


# オリジナルのモジュールを条件に一致した場合のみ読み込むサンプルコード
if($str eq 'ok'){
    require 'ExampleRequire.pm';
    use Example;
}
 オリジナルのモジュールを条件に一致した場合のみ読み込むサンプルコード

use 文と require 文の使い分けは、モジュールの実行頻度とメモリの使用率によって分けられます。


実行頻度が多いモジュールの場合は、use 文を使います。実行頻度の多いモジュールを、スクリプト実行時に逐次呼び出す require 文 では、パフォーマンスのボトルネックになる可能性があります。


メモリの使用率が高いモジュールの場合は、require 文を使います。メモリの使用率が高いモジュールを、コンパイル時にメモリにすべてロードする use 文では、メモリの使用率が高まる可能性があります。

さくらインターネットで使える Perl のモジュール一覧

さくらインターネットで使用できる Perl のモジュールは、以下のコマンドで取得できます。コマンド実行結果は非常に長くなるため省略しまmす。


find `perl -e 'print join(" ", @INC)'` -name "*.pm" -print
 さくらインターネットで使える Perl のモジュール一覧を取得するコマンド

CPAN で Perl のモジュールを探す

CPAN (Comprehensive Perl Archive Network) とは、Perlのモジュールやその他の Perl で書かれたソフトウェアを集めた巨大なアーカイブです。再利用性・汎用性の高いモジュールが多く登録されており、Perl プログラマの支援環境となっています。ただし、世界中の Perl プログラマを対象にしているため、英語のサイトとなります。


The Comprehensive Perl Archive Network - www.cpan.org

The CPAN Search Site - search.cpan.org

Perl のモジュールをインストールする手順

モジュールをインストールするには、まず CPAN から対象のモジュールをダウンロードします。以下は、Data::UUID を例に説明しています。


Data::UUID - search.cpan.org

ダウンロードが終わったら、ダウンロードしたファイルをサーバの任意の場所に配置します。次に CUI でサーバにログインし、ダウンロードしたファイルを配置したディレクトリまで移動します。その後、以下のコマンドを順番に実行することでインストールが完了します。ただし、Makefile を実行する手順において "PREFIX" に指定するパスは、ダウンロードファイルを配置したパスを指定して下さい。


# Data-UUID-1.221.tar.gz を解凍する
% tar zxvf Data-UUID-1.221.tar.gz
・・・ (中略) ・・・

# ディレクトリを移動する
% cd Data-UUID-1.221

# Makefile を実行する
% perl Makefile.PL PREFIX=/home/murashun/cpan/
・・・ (中略) ・・・

# make test コマンドを実行する
% make test
・・・ (中略) ・・・

# make install コマンドを実行する
% make install
・・・ (中略) ・・・
 モジュールをインストールするコマンド実行例

インストール完了後、モジュールを使うにはプログラム内にパスを指定する必要があります。インストールが正常に完了していれば、ダウンロードファイルを配置したディレクトリに配下に /lib/perl5/site_perl/5.14/mach と続くディレクトリができています。そのパスを絶対パスで、以下のように指定することで対象のモジュールが使用可能になります。


use lib qw(/home/murashun/cpan/lib/perl5/site_perl/5.14/mach);
use Data::UUID qw(NameSpace_URL);
 モジュールをインストール完了後に指定するパス

もしも対象のモジュールをアンインストールしたい場合は、対象のディレクトリを削除することでアンインストールできます。

まとめ

Perl のモジュールインストールはコマンドラインで行うため、難しいと感じるかもしれません。しかし、数回の手順でインストールすることができるため、苦手意識を持たずにやってみるといいかもしれません。さくらインターネットでは、モジュールのインストール方法はサポート対象外のため、上記の手順でインストールしてみて下さい。ただし、さくらインターネットの公式ヘルプでも書かれている通り、スタンダード以上のプランでのみ実施できます。