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