访问动态加载的模块的资源

时间:2018-12-11 03:08:02

标签: module perl6

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

require ::($module);

获取其%?RESOURCES的一种方法是要求模块具有一个可以返回此哈希值的子程序:

sub resources { %?RESOURCES }

但这会增加一些样板代码。

另一种方法是深度扫描$*REPO并获取模块的分发元。

是否有更好的选择来完成此任务?

1 个答案:

答案 0 :(得分:5)

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

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;

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