2009-02-08
do - 原始的なモジュール読み込み。モジュールの読み込みの仕組み
モジュールの読み込みとは、単にファイルをPerlのソースコードとして読み込むことです。読み込まれたファイルはコンパイルされ、実行されます。
もっとも原始的なモジュール読み込み方法 do
doは、どのコードを読んでももうほとんど見られない関数です。doは、ファイルをPerlのソースコードとして読み込むための関数です。
以下のソースコードと同じディレクトリに、Sample.pmを配置して、実行してましょう。Sample.pmが読み込まれて、その中に含まれる one関数が使用できるようになります。
do "Sample.pm"; # 1 と表示される print one;
Sample.pm
sub one { return 1 } 1;
読み込まれるファイルの末尾には、1と書く必要があることに注意してください。少し面倒で、間違いやすいですが、読み込まれるファイルの末尾は真の値を記述する必要があるというルールがあるので従う必要があります。
標準的なモジュール読み込み方法 require関数
require関数は、do関数を進化させたものです。require関数はdoと同じようにファイルをPerlのソースコードとして読み込みことに加えて、さらに便利な機能があります。
- 一度読み込んだモジュールについては、2度目は読みこまない。
- Perlのライブラリのパスからモジュールを検索する。
- モジュール名の指定だけでモジュールの読み込みができる。
この2つがdoと比較した場合の、requireの利点です。
2回読み込まないということは、速度的な面で有利です。Perlのライブラリのパスからモジュールを検索してくれるということは、モジュールのファイル名(絶対パス)について気にする必要がなくなるということです。
モジュール名の指定で読み込めることで、モジュールの読み込みの記述を簡潔にできます。以下の記述で、Perlのライブラリのパスから、Carp.pmというモジュールを読み込みます。
require Carp;
モジュールの検索パス @INC
モジュールの検索パスは、特殊変数 @INC に格納されています。コマンドラインから
print join( "\n",@INC );
で見ることができます。たとえば、以下のような感じで出力されます。require関数はこのライブラリのパスからモジュールを検索します。
/usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/5.8.8
読み込まれたモジュールの確認 %INC
あるモジュールが読みこまれているかどうかは、特殊変数 %INC を調べることで確認することができます。Data::Dumperモジュールで、%INCの内容を出力してみます。
use Data::Dumper 'Dumper'; print Dumper(\@INC);
たとえば以下のように、読み込んだモジュールのファイル名とその絶対パスの組が表示されます。require関数はこの情報を使って、読み込まれたかどうかの確認をしています。
%INC = ( 'warnings/register.pm' => 'C:/Perl/5.8.8.822/lib/warnings/register.pm', 'bytes.pm' => 'C:/Perl/5.8.8.822/lib/bytes.pm', 'XSLoader.pm' => 'C:/Perl/5.8.8.822/lib/XSLoader.pm', 'Carp.pm' => 'C:/Perl/5.8.8.822/lib/Carp.pm', 'Exporter.pm' => 'C:/Perl/5.8.8.822/lib/Exporter.pm', 'strict.pm' => 'C:/Perl/5.8.8.822/lib/strict.pm', 'warnings.pm' => 'C:/Perl/5.8.8.822/lib/warnings.pm', 'overload.pm' => 'C:/Perl/5.8.8.822/lib/overload.pm', 'Data/Dumper.pm' => 'C:/Perl/5.8.8.822/lib/Data/Dumper.pm' );
もっとも標準的なモジュールの読み込み方法 use
もっとも標準的なモジュールの読み込み方法はuseを使う方法です。useはコンパイルのときに、requireを実行し、さらにimportメソッドを実行して、関数をインポートします。
use Carp 'croak';


