Mojo::Loader - あらゆる種類のものをロードする
使い方
use Mojo::Loader qw(data_section find_modules load_class);
# 名前空間の中のモジュールを探す
for my $module (find_modules 'Some::Namespace') {
# 安全にロードする
my $e = load_class $module;
warn qq/Loading "$module" failed: $e/ if ref $e;
# DATAセクションからファイルを抽出する
say data_section($module, 'some_file.txt');
}
説明
Mojo::Loaderはクラスのローダーとプラグインのフレームワークです。 モジュールの探索とクラスのロードとは別に、 複数のファイルを、クラスのDATAセクションに保存することもできます。 これは、個別にアクセス可能です。
package Foo; 1; __DATA__ @@ test.txt This is the first file. @@ test2.html (base64) VGhpcyBpcyB0aGUgc2Vjb25kIGZpbGUu @@ test This is the third file.
それぞれのファイルは@@で始まるヘッダを持ち、 その後にファイル名と、そのコンテンツのデコードのためのオプションの指示が続きます。 現在はBase64エンコーディングがサポートされています。 これはバイナリデータの保存のためにとても便利です。
関数
Mojo::LoaderはMojo::Baseの関数を実装しており、 個別にインポート可能です。
data_section
my $all = data_section 'Foo::Bar'; my $index = data_section 'Foo::Bar', 'index.html';
クラスのDATAセクションから埋め込まれたファイルを抽出します。 最初にアクセスされたときに、すべてのファイルがキャッシュされます。
say for keys %{data_section 'Foo::Bar'};
file_is_binary
my $bool = file_is_binary 'Foo::Bar', 'test.png';
クラスのDATAセクション埋め込まれたファイルがBase64エンコードされているかをチェックします。
find_modules
my @modules = find_modules 'MyApp::Namespace';
再起せずに、名前空間の中にあるモジュールを検索します。
find_packages
my @pkgs = find_packages 'MyApp::Namespace';
再帰せずに名前空間からパッケージを検索します。
load_class
my $e = load_class 'Foo::Bar';
クラスをロードし、例外をキャッチします。 すでにロードされているかを見るためにnewによってチェックされることに注意してください。
クラスをロードして例外をキャッチし、ロードが失敗した場合は偽を返します。 成功した場合、クラスが見つからなかった場合は真の値、ロードに失敗した場合はMojo::Exceptionを返します。 オブジェクトクラスはC
# 例外を処理する
if (my $e = load_class 'Foo::Bar') {
die ref $e ? "Exception: $e" : 'Not found!';
}
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月22日更新)
Mojoliciousドキュメント日本語訳