如何找到Perl 6模块的版本和权限?

时间:2017-07-03 10:59:39

标签: module perl6 raku

Bar.pm 中,我声明了一个具有权限(作者)和版本的类:

class Bar:auth<Camelia>:ver<4.8.12> {
    }

如果我在程序中使用它,我如何查看我正在使用的模块版本,编写者以及模块加载程序如何找到它?与往常一样,文档链接很重要。

此问题也在perl6-users上提出,但在出现满意答案(或文档链接)之前就已经死了。

这个问题的另一个问题是许多人没有将这些信息添加到他们的类或模块定义中。它显示在 META.json 文件中,但不显示在代码中。

1 个答案:

答案 0 :(得分:12)

(可能不是一个令人满意的答案,因为事情的事实不是很令人满意,特别是关于文档的状态,但在这里......)

如果模块或类直接在源代码àlaclass Bar:auth<Camelia>:ver<4.8.12>中版本化,那么导入它的任何代码都可以introspect

use Bar;

say Bar.^ver;   # v4.8.12
say Bar.^auth;  # Camelia

# ...which is short for:
say Bar.HOW.ver(Bar);   # v4.8.12
say Bar.HOW.auth(Bar);  # Camelia

verauth方法由以下人员提供:

不幸的是,我不认为元对象目前提供了一种获取模块/类的源路径的方法。
通过手动执行userequire加载编译单元的步骤,您至少可以获得前缀路径(即$PERL6LIB或{{1}的位置或者use lib等等。它是从

加载的
-I

my $comp-spec = CompUnit::DependencySpecification.new: short-name => 'Bar'; my $comp-unit = $*REPO.resolve: $comp-spec; my $comp-repo = $comp-unit.repo; say $comp-repo.path-spec; # file#/home/smls/dev/lib say $comp-repo.prefix; # "/home/smls/dev/lib".IO CompUnit类型的对象 $comp-unitCompUnit::Repository::FileSystem 两个文档页面尚不存在,$comp-repo仅在list of dynamic variables中简要提及。

如果模块是正确设置distribution的一部分,您可以获取邮件列表主题中$*REPO as posted by Lloyd Fournier中定义的元信息你提到过)

META6.json