「モジュール」とは

「車輪の再発明をするな」という言葉を聞いた事がありますか?

この言葉は「誰かがもう便利なものを作ってくれているかもしれないので、思いついたら作る前に探してみよう」という意味です。

プログラミング上この車輪に当たるのが、前回 ( http://allabout.co.jp/gm/gc/423957/ ) も作った「サブルーチン」です。サブルーチンは、使い回せるコードをまとめておいたものでした。

このサブルーチンは、自分で作ったものはもちろん後で自分で使う事ができますが、人が作ってくれたものを使ってもいいのです。Perl プログラマは世界中にたくさんいますが、その人たちが作ってくれたサブルーチンを、誰でも使えるように公開してあるものを「モジュール」と呼びます。

他のプログラミング言語では「ライブラリ」「クラス」と呼ぶ事がありますが、同じものです。

Perl では、Perl の実行環境をインストールした時に自動的にインストールされるモジュールを「標準モジュール」、プログラマが自分で追加インストールしなければ使えないモジュールを「CPANモジュール (しーぱんもじゅーる)」と呼んでいます。「CPAN」というのは配布サイトの名前なのですが、これについてはまた別の記事で詳しく扱います。

今日はまず追加インストールなしで使える標準モジュールを例に、モジュールの使い方を覚えましょう。

標準モジュールの使い方

以下のサンプルコードを保存、実行して下さい。
#Perlの標準モジュールを使う

use strict;
use warnings;
use utf8;
binmode STDOUT, ':encoding(utf8)'; #Windows は utf8->cp932

use File::Basename;

my $path = '/path/to/some/file.txt';
my $filename = basename($path);
my $dir = dirname($path);

print "$path のファイル名は $filename です。
";
print "ディレクトリは $dir です。
";
出力は以下のようになる筈です。
/path/to/some/file.txt のファイル名は file.txt です。
ディレクトリは /path/to/some です。
ここで使っているのは「File::Basename」という名前の標準モジュールで、ファイルパスからファイル名やディレクトリ名を取り出す時に使います。

モジュール内のサブルーチン呼び出し

一つのモジュールには関連する機能のサブルーチンを通常複数まとめてあります。モジュール内で定義されているサブルーチンは「&」記号を付けずに呼び出しが可能です。(「&」を付けて呼び出しても問題はありません。)

このサンプルプログラムで使っているサブルーチンはファイル名を取り出すための「basename」とディレクトリ名を取り出す「dirname」です。

使用するモジュールの指定

こういった定義済みのサブルーチンを使わせてもらいますね、と宣言しているのが、もっと上にある 「use」で始まる行です。
use File::Basename;
試しに、この行を「コメントアウト」してもう一度プログラムを実行してみましょう。
「コメントアウト」とは先頭に「#」を付けて、その行を全て無効にする事です。
#use File::Basename;
この状態でプログラムを実行してみて下さい。以下のようなエラーが出てしまいます。
Undefined subroutine &main::basename called at prog.pl line 11.
「Undefined subroutine」とは、「そのようなサブルーチンは定義されていません」という意味です。「line 11」は「my $filename = basename($path);」の部分ですが、ここで呼び出しているサブルーチン basename が、プログラム内には定義されていないのでこのようなエラーが出ます。

予めインストールしてある標準モジュールであっても、「use」で「使いますよ」と宣言しないとエラーになってしまう事が分かりました。別の言い方をすると、自分でファイル内にサブルーチンを定義する代わりに「use (モジュール名)」と書いておく必要がある、という事になります。

Perl モジュールの使い方

Perl モジュールの使い方


Perl モジュールの使い方

モジュールを使う時は、まず use 文で使用を宣言して下さい。そうすると、自分で定義したサブルーチンと同じようにモジュールで定義済みのサブルーチンが使えます。
use (モジュール名);
:
(モジュールで定義済のサブルーチンを使う)
:

なお、use 文でモジュールの使用を宣言する事を、「モジュールを use (ゆーず)する」と言ったりします。

>次は:標準モジュールの探し方