Perl Language
パッケージとモジュール
サーチ…
構文
- モジュール::名前が必要です。 #@INCの名前で必要とする
- "path / to / file.pm"が必要です。 #@INCからの相対パスで要求する
- Module :: Nameを使用します。 #requireとBEGINのデフォルトインポート
- Module :: Name();を使用します。 #BEGINで必要なインポートとインポートがありません
- Module :: Name(@ARGS)を使用します。 #BEGINでargsを指定してインポートする
- Module :: Name VERSIONを使用します。 #require、version check、BEGINのデフォルトのインポート
- Module :: Name VERSION();を使用してください。 #require、version check、BEGINでのインポートなし
- Module :: Name VERSION(@ARGS)を使用します。 #require、version check、BEGINでargsを使ってインポートする
- "path / to / file.pl"を実行します。 #与えられたファイルを読み込んで評価する
別のファイルの内容を実行する
do './config.pl';
これにより、config.plファイルの内容が読み込まれ、実行されます。 ( perldoc -f do
も参照してください。)
注意:ゴルフや何かがエラーチェックされてdo
ない限りは避けてください。ライブラリモジュールを含めるには、 require
またはuse
。
実行時にモジュールをロードする
require Exporter;
これにより、 Exporter
モジュールがまだインポートされていない場合は、実行時にロードされます。 ( perldoc -f require
も参照してください。)
注意:ほとんどのユーザーはuse
モジュールをrequire
せずにuse
べきrequire
。 use
とは異なり、 require
はモジュールのimportメソッドを呼び出さず、コンパイル時ではなく実行時に実行されます。
モジュールをロードするこの方法は、プラグインシステムなど、実行前に必要なモジュールを決めることができない場合に便利です。
package My::Module;
my @plugins = qw( One Two );
foreach my $plugin (@plugins) {
my $module = __PACKAGE__ . "::Plugins::$plugin";
$module =~ s!::!/!g;
require "$module.pm";
}
これは、 My::Package::Plugins::One
とMy::Package::Plugins::Two
をロードしようとします。 @plugins
はもちろん、これを意味するために、いくつかのユーザー入力や設定ファイルから来るべきです。各対のコロンをスラッシュに置き換える置換演算子s!::!/!g
注目してください。これは、使い慣れたモジュール名構文をuse
て、モジュール名が裸である場合にのみ、モジュールを読み込むことができるからです。文字列または変数を渡す場合は、ファイル名を含める必要があります。
モジュールの使用
use Cwd;
これは、コンパイル時にCwd
モジュールをインポートし、デフォルトシンボルをインポートします。つまり、モジュールの変数と関数の一部を使用してコードで使用できるようにします。 ( perldoc -f use
も参照してください。)
一般的にこれは正しいことです。ただし、インポートするシンボルを制御したい場合があります。エクスポートするモジュール名の後にシンボルのリストを追加する:
use Cwd 'abs_path';
これを行うと、指定したシンボルのみがインポートされます(つまり、デフォルトのセットはインポートされません)。
複数のシンボルをインポートする場合は、 qw()
リスト構築qw()
を使用するのがqw()
的です。
use Cwd qw(abs_path realpath);
いくつかのモジュールは、シンボルのサブセットをエクスポートしますが、すべてをエクスポートするように指示することができます:all
:
use Benchmark ':all';
(すべてのモジュールが:all
タグを認識または使用するわけではないことに注意してください)。
ディレクトリ内のモジュールの使用
use lib 'includes';
use MySuperCoolModule;
use lib 'includes';
相対ディレクトリincludes/
を別のモジュール検索パスとして@INC
ます。したがってincludes/
を含む内部includes/
MySyperCoolModule.pm
というモジュールファイルがあるとします。このファイルにはMySyperCoolModule.pm
がincludes/
います:
package MySuperCoolModule;
必要に応じて、1つのディレクトリ内に自分のモジュールをいくつでもグループ化し、1つのuse lib
ステートメントで見つけることができます。
この時点で、モジュール内のサブルーチンを使用するには、サブルーチン名の前にパッケージ名を付ける必要があります。
MySuperCoolModule::SuperCoolSub_1("Super Cool String");
接頭辞なしでサブルーチンを使用できるようにするには、サブルーチン名を呼び出すプログラムによって認識されるようにサブルーチン名をエクスポートする必要があります。エクスポートは自動的に設定できるため、次のようになります。
package MySuperCoolModule;
use base 'Exporter';
our @EXPORT = ('SuperCoolSub_1', 'SuperCoolSub_2');
モジュールをuse
するファイルでuse
、これらのサブルーチンは自動的に使用可能になります。
use MySuperCoolModule;
SuperCoolSub_1("Super Cool String");
または、条件付きでサブルーチンをエクスポートするようにモジュールを設定することもできます。
package MySuperCoolModule;
use base 'Exporter';
our @EXPORT_OK = ('SuperCoolSub_1', 'SuperCoolSub_2');
この場合、モジュールをuse
するスクリプトでエクスポートする必要なサブルーチンを明示的に要求する必要があります。
use MySuperCoolModule 'SuperCoolSub_1';
SuperCoolSub_1("Super Cool String");
CPAN.pm
CPAN.pm
は、CPANサイトからモジュールを照会してインストールできるPerlモジュールです。
それは、
cpan
または
perl -MCPAN -e shell
モジュールのクエリ
名前で:
cpan> m MooseX::YAML
モジュール名に対する正規表現:
cpan> m /^XML::/
注意:ページャーを有効にするか、ファイルにリダイレクトするには|
または>
シェルのリダイレクト(スペースは|
と>
周りに必須です)。例: m /^XML::/ | less
。
流通によって:
cpan> d LMC/Net-Squid-Auth-Engine-0.04.tar.gz
モジュールのインストール
名前で:
cpan> install MooseX::YAML
流通によって:
cpan> install LMC/Net-Squid-Auth-Engine-0.04.tar.gz
インストールされているすべてのモジュールのリスト
コマンドラインから:
cpan -l
Perlスクリプトから:
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();