use - モジュールを読み込む
モジュールをコンパイル時に読み込むにはuseを使用します。
use モジュール名
モジュール名は裸の文字列で指定する必要があります。クォートやダブルクォートで囲んだ文字列は受け付けません。また変数も受付ません。
# 裸の文字列でモジュール名を指定する use CGI;
また標準的な慣習としてモジュール名の後ろに関数名を指定すると、関数を現在の名前空間にインポートすることができます。
# 関数のインポート use File::Basename 'basename', 'dirname';
モジュールを読み込む手段としては、useの他にrequire関数がありますが、モジュールを読み込む場合は通常はuseを使っておきましょう。モジュールは、importメソッドを呼ばれることを期待しているので、use を使えば自動で行ってくれます。
useで実行される処理
useで実行されるのは次の処理です。File::Basenameの場合を例にしています。
# useで実行される処理 BEGIN { require File::Basename; File::Basename->import(qw/basename dirname/); }
BEGINブロックで囲われた部分はコンパイル時に実行されます。requireでモジュールが読み込まれ、そのモジュールのimportがメソッド呼び出しとして実行されます。
importを実行しない方法
useは自動的にimportを実行します。importを実行したくない場合は次のようにします。
# importを実行しない use File::Basename ();
useに変数を渡す方法
useは裸の文字列しか受け取ることができないため、変数を渡すには工夫が必要です。evalを使って変数名を裸の文字列として認識させる必要があります。
またevalは危険がある処理を実行する可能性があるので、必ず有害な処理を含まないことを確認してから実行します。モジュールの読み込みに失敗した場合はエラーメッセージが$@に格納されます。
# useに変数を渡す # モジュール名 my $module = 'AAA'; # ワード文字だけで構成されていることを確認 die "Invalid module name" if $module =~ /\W/; # モジュールの読み込み eval "use $module"; # モジュール読み込みに失敗した場合の処理 die $@ if $@;