7

Perl 6 程序中的文档,使用 Pod 6 DSL,实际上被解析为代码的一部分;这使得该文档在程序内部作为$=pod变量可用。但是,我想访问该变量,以便从测试中处理它。在我为 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) );

}

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

我在一些代码中看到可以使用 precomp 存储(抱歉,没有好的单一来源来解释这些)用于相同的事情。最终,这条线

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

诀窍是访问一个模块的 Pod,该模块由 precomp 存储表示并包含在$handle.unit. 问题是这实际上是较低级别,使用 NQP 的nqp::atkey运算符,而不是 perl

有很多方法可以做到这一点,所以我可以想到两个不同的可能问题。1. 有没有办法通过 FQN(前面是 ::)访问required 或used 单元的 Pod?2. 我们是否可以访问required 或used 单元的 precomp 句柄以便我们可以nqp::atkey直接调用?

4

1 回答 1

3

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

于 2019-07-29T05:08:11.370 回答