Получение модуля модуля без явного его экспорта

Документация в программах на 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];

Делает трюк, получая доступ к модулю модуля, который представлен магазином precomp и содержится в $handle.unit, Дело в том, что это на самом деле более низкий уровень, используя nqp::atkey оператор NQP, не совсем перл.

Есть много способов сделать это, поэтому я могу придумать два разных возможных вопроса. 1. Есть ли способ получить доступ через FQN (предшествует::) Pod этого require д или use д блок? 2. Есть ли у нас доступ к дескриптору precomp require д или use д блок, чтобы мы могли позвонить nqp::atkey напрямую?

0 ответов

Я использовал эту технику (поиск более простых способов сделать это) для создания Module::Pod (скоро будет опубликован). См. Мой ответ: /questions/39318773/dostup-k-pod-iz-drugogo-fajla-perl-6/55254524#55254524

Другие вопросы по тегам