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(前面是 ::)访问require
d 或use
d 单元的 Pod?2. 我们是否可以访问require
d 或use
d 单元的 precomp 句柄以便我们可以nqp::atkey
直接调用?