Документация в программах на Perl 6, использующих Pod 6 DSL, фактически анализируется как часть кода ;это делает эту документацию доступной внутри программы в виде переменной $=pod
.Однако мне бы хотелось иметь доступ к этой переменной, чтобы обработать ее, скажем, из тестов.В этот пример, который я написал для календаря приключений Perl 6 , он просто экспортируется как переменная класса (в данном случае грамматика):
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) );
}
Работает при вызове с именем класса и правильным путем;но он все еще нуждается в явном экспорте переменной.
Я видел в некоторый код , который можно использовать в хранилищах предварительной компиляции (извините, нет хорошего единственного источника для объяснения этих) длято же самое.В конце концов, эта строка
return nqp::atkey($handle.unit,'$=pod')[0];
добивается цели, получая доступ к модулю, который представлен магазином precomp и содержится в $handle.unit
.Дело в том, что на самом деле это более низкий уровень, с использованием оператора nqp::atkey
для NQP, не совсем perl .
Есть много способов сделать это, поэтомуЯ могу думать о двух разных возможных вопросах.1. Есть ли способ получить доступ через FQN (которому предшествует: :) Pod этого устройства require
d или use
d?2. Имеем ли мы доступ к дескриптору precomp блока require
d или use
d, чтобы мы могли напрямую вызывать nqp::atkey
?