(可能不是一个令人满意的答案,因为这件事的事实并不令人非常满意,尤其是关于文件的状态,但在这里它去...)
如果模块或类是在源代码中直接版本点菜class 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
Ť
不幸的是,我不认为元对象目前提供一种方式来获得在模块/类的源路径。
通过手动经历的步骤是use
和require
的加载时编译单元,你至少可以在(即从$PERL6LIB
或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
$comp-unit
是CompUnit
类型的对象。
$comp-repo
是CompUnit::Repository::FileSystem
。
这两个文档页面都不存在,$*REPO
仅在list of dynamic variables中简要提及。
如果模块是一个正确建立distribution的一部分,你可以在它的META6.json
(as posted by Lloyd Fournier在你所说的邮件列表线程)定义的元信息:
if try $comp-unit.distribution.meta -> %dist-meta {
say %dist-meta<ver>;
say %dist-meta<auth>;
say %dist-meta<license>;
}
[“auth”是“auth”而不是“author”](https://irclog.perlgeek.de/perl6/2017-04-20#i_14460369)。 – raiph
“[auth]信息...显示在META.json文件中,但不包含代码。” [TimToady,关于这个问题](https://irclog.perlgeek.de/perl6/2017-04-20#i_14460332):“当一个模块被修补时强制一个新版本......我发送了一个pr到jnthn来修复一个错误,但忘了增加patchlevel,所以zef没有看到它...... name/ver/auth [must]对应于一个唯一的文本,如果安装到官方库[OR]包含[crypto]散列作为的身份[OR] git修订版...如果你不能命名你正在寻找的“正确”版本,这将是一场噩梦“。 – raiph