在不显式导出模块的情况下获取模块的Pod

时间:2018-12-05 14:12:32

标签: perl6 precompiling nqp pod6

documentation in Perl 6 programs, using the Pod 6 DSL, are actually parsed as part of the code;这样,该文档就可以在程序内部作为$=pod变量使用。 但是,我希望能够访问该变量,以便从例如测试中对其进行处理。在this example I wrote for the Perl 6 Advent Calendar中,它只是作为类(在这种情况下为语法)变量导出:

our $pod = $=pod[0];

然后我可以这样使用它:

use Data::Dump;

use MONKEY-SEE-NO-EVAL;

sub MAIN( $module  ) {
    try require ::($module);
    say Dump( $::($module)::pod, :max-recursion(2) );

}

在使用类名和正确的路径调用时可以使用;但是它仍然需要显式导出变量。

我在some code中看到,precomp存储可以用于同一件事(抱歉,没有很好的单一来源来解释这些问题)。最终,这一行

 return nqp::atkey($handle.unit,'$=pod')[0];

发挥作用,访问由precomp存储代表并包含在$handle.unit中的模块的Pod。事实是,使用nqp::atkeyNQP, not quite perl运算符实际上是较低的级别。

执行此操作的方法有很多,因此我可以想到两个不同的可能问题。 1.是否可以通过FQN(以::开头)访问该require d或use d单元的Pod? 2.我们是否可以访问require d或use d单元的precomp句柄,以便我们可以直接调用nqp::atkey

1 个答案:

答案 0 :(得分:1)

我使用了这种技术(找到更简单的方法)来创建Module::Pod(即将发布)。查看我的答案:https://stackoverflow.com/a/57247392/332359