访问动态加载模块的资源

Vad*_*man 6 module perl6

我找不到正确访问已安装发行版资源的方法.例如,动态加载模块时:

require ::($module);

获取它的一种方法%?RESOURCES是让模块有一个可以返回此哈希的sub:

sub resources { %?RESOURCES }

但这增加了样板代码.

另一种方法是深度扫描$*REPO和获取模块的分布元.

有没有更好的选择来完成这项任务?

uge*_*exe 5

一种方法是使用$*REPO(正如您已经提到的)以及作为META6数据的接口及其到给定数据存储/文件系统的映射的Distribution对象CompUnit::Repository.

my $spec = CompUnit::DependencySpecification.new(:short-name<Zef>);
my $dist = $*REPO.resolve($spec).distribution;
say $dist.content("resources/$_").open.slurp for $dist.meta<resources>.list;
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于目前已安装的发行版,但适用于尚未安装的发行版(如-Ilib)https://github.com/rakudo/rakudo/pull/1812