Возможно, вы захотите взглянуть на Rinci . Примеры приложений, которые используют это: File :: RsyBak , Git :: Bunch , App :: OrgUtils .
Вот как вы документируете модули. Вы объявляете% SPEC в своем модуле и помещаете в него документацию. Каждая функция получает свой собственный ключ. Есть предопределенные поля. Локализация поддерживается. Форматирование выполняется в Markdown. Пример:
$SPEC{':package'} = {
summary => 'Module to do foo',
"summary.alt.lang.id_ID" => "Modul untuk melakukan foo",
description => <<EOT,
Blah...
...
EOT
links => [...],
};
$SPEC{func1} = {
summary => '...',
description => '...',
args => {
arg1 => {
schema => ...,
summary => ....,
description => ...,
},
},
examples => [...],
links => [...],
...
};
Вместо использования Java или Perl 5 стиля размещения документации в «комментариях», он использует структуру данных, непосредственно доступную для программ. (Обратите внимание, что Perl 6 также идет по этому пути.) Думайте об этом как о сумасшедшей (или структурированной) структуре документов Python.
Есть инструменты для генерации POD, текста, HTML из метаданных (спецификации). Помимо документации, метаданные также полезны для других целей, таких как проверка аргументов, интерфейс командной строки и т. Д.
Раскрытие информации: я разработчик.