2014-02-04 2 views
1

Это наивный вопрос, за который я изо всех сил пытался найти элегантное решение. Я пишу perl-скрипты, которые по мере их взросления растут в количестве опций, переданных GetOptions. Важные варианты сценария, я добавляю сверху как документацию POD, но я полагаюсь на предоставление значимых имен другим параметрам, и я не хочу документировать их явно.perl добавить опции в документацию pod из hash в GetOptions

Я хотел бы передать хэш в GetOptions как-то к содержанию, напечатанному perldoc, так что там указаны не документированные параметры. Любой вариант?

ответ

1

Я рационализирую, что ваша точка зрения является первым кодом и документом позже, что становится стабильным. Это справедливо, когда вам нужно писать дважды документы и код. Но в наши дни это не так. Моя рекомендация для прототипирования - писать man-страницу и использовать модуль, который создает код для вас.

Мой любимый в perl и python: docopt (и имеет реализации для многих других языков). Здесь вы можете найти Perl Docopt

Я спросил о perl implementatios for docopt давно в StackOverflow и я указал на docopt модуль и другие варианты, как Getopt::Euclid, Getopt::Auto и Getopt::AsDocumented

Связанных с беспокойством о том, не увеличивающихся зависимости CPAN, в питоне Docopt является selfcontained, но я думаю, что это не верно для реализации PERL, которая зависит от булевых, Class :: Accessor :: Lite, списка :: MoreUtils, списка :: Util, родителя, Pod :: Использование и Scalar :: Util; и зависимостей зависимостей.

Если реализация perl Docopt не такая маленькая и автономная, как исходный Python, то, вероятно, настало время дать ей более широкое использование и начать заполнять запросы функций/реализации, потому что IMHO, метод doctopt делать вещи - ОДИН из многих способов сделать все правильно.

Наконец, вы поговорите о том, почему docopt. Речь идет о python, но логика интерфейсов командной строки и UX одинаковы для всех языков: PyCon UK 2012: Create beautiful command-line interfaces with Python

5

perldoc parses pod. Вам нужно будет написать скрипт, чтобы изменить ваш .pl-код на основе значений, полученных при запуске вашего .pl ... Да, это не похоже на хорошую идею.

Возможно, вас заинтересует Getopt::Euclid, Docopt, Getopt::Auto или Getopt::AsDocumented. Они используют противоположный подход: вы определяете параметры в документации и анализируете документацию, чтобы определить, как обрабатывать командную строку.

+0

Getopt :: Евклид звучит как моя чашка чая, я попробую. Глупый вопрос, но ничего больше, что уже есть в основных модулях и не требует зависимости от модуля? – 719016

+0

Если вы хотите узнать, какие модули включены в ядро, используйте ['corelist'] (http://search.cpan.org/perldoc?corelist) (поставляется с [Module :: CoreList] (http: // search .cpan.org/perldoc? Module :: CoreList)) – ikegami

Смежные вопросы