Доступ к POD из другого файла Perl 6

В документации Perl 6 POD есть раздел о доступе к документу POD текущего файла с помощью $=pod, Нет информации о доступе к документу POD другого файла.

Как я могу получить доступ к структуре POD другого файла, не изменяя текущий файл $=pod?

1 ответ

Теперь вы можете сделать это с помощью Pod:: Load. Из README в каталоге примеров

  perl6 -e 'use Pod::Load; .perl.say for load("pod-load-clean.pod6")'

Обратите внимание, что файл Pod6 должен быть "чистым", то есть не использовать какой-либо внешний модуль, который обычно недоступен, иначе он может выйти из строя.

Я создал независимое от файловой системы решение в Module::Pod (скоро будет опубликовано) по адресу git@github.com:dmaestro/Module-Pod.git

use Module::Pod;

# Get all Pod::Block::* objects in the module, from its own $=pod
my @pod = pod-from-module(<My::Module>);

Плюсы:

  • Нет прямых оценок кода файла (даже в Module::Pod)
  • Использует CompUnit::Repository и родственников для поиска модуля.
  • Может использоваться с или без use-Изменение модуля для других целей в вашем коде
  • Если модуль уже загружен, вы можете вызвать его Type Object

Минусы:

  • Модуль использует nqp: методы напрямую, как в Pod::Convenience (может, это не совсем минус?)
  • Невозможно получить пакет из файлов *.pod

Предназначен для использования в тестах проверки Pod6 и т. Д.

Возможно, кто-то знает чистый способ сделать это, и в этом случае я, вероятно, просто удалю этот слабый хакерский непроверенный тип комментариев-комментариев-ответов, если кто-то не подтвердит, что это работает, и приблизительный консенсус стоит оставить здесь.

Я подозреваю, что вам нужно обойти куст шелковицы.

Что-то вроде следующего. (Не испытано.)

unit class Pod::To::DotPerl;
method render ($pod) { print $pod.perl }

сохранено в lib/Pod/To/DotPerl.pm6 и установлен с zef тогда (не проверено):

use MONKEY-SEE-NO-EVAL;
my $pod;
try (run <perl6 --doc=DotPerl.pm6 $file>, :err, :out)
  andthen $pod = EVAL .out.slurp(:close)
  orelse die .err.slurp(:close)

Смотрите в конце моего предыдущего ответа для описания того, что происходит.

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