名前

Mojo::Loader - あらゆる種類のものをロードする

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エンコーディングがサポートされています。 これはバイナリデータの保存のためにとても便利です。

使い方

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::LoaderMojo::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日更新)