Как мне получить Perl POD в строке и напечатать его на странице? - PullRequest
2 голосов
/ 05 октября 2009

У меня есть документ POD. Теперь я хочу преобразовать этот POD в анализируемый раздел, такой как использование / описание, и получить его в виде строки.

Почему бы не pod2usage?

Это не помогает мне получить вывод в виде строки, но в STDOUT / file. Я подчеркиваю пункт «получить его в строку», потому что я хочу отображать POD в «страницах», если длина превышает длину экрана. pod2usage не печатает их на страницах: (

Может кто-нибудь сказать мне, какой модуль использовать для этой цели?

Ответы [ 3 ]

2 голосов
/ 05 октября 2009

Pod :: Usage , на который есть ссылка в нижней части справочной страницы pod2usage.

1 голос
/ 06 октября 2009

Вам не нужно делать весь анализ Pod самостоятельно; большая часть этого уже сделана с Pod :: Simple . Вы можете написать короткий подкласс, чтобы делать все, что вам нужно. У меня есть глава по освоению Perl, в которой подробно рассказывается, но вы также можете посмотреть на мой модуль Pod :: Perldoc :: TOC , чтобы увидеть короткий пример.

По сути, вы обрабатываете элементы = head1, но пропускаете те, которые не являются ОПИСАНИЕМИ. Как только вы столкнетесь с right = head1, установите флаг и обрабатывайте раздел, пока не столкнетесь с другим = head1, после чего вы прекратите синтаксический анализ. Вы можете делать все что угодно между = head1, включая добавление к переменной.

1 голос
/ 05 октября 2009

Из документации Pod :: Parser :

В качестве альтернативы, объект IO :: String также принимается как дескриптор выходного файла.

Так что это совершенно законно:

#!/usr/bin/perl
use strict;
use IO::String;
use Pod::Text;
my $buffer;
my $io = IO::String->new($buffer);
my $parser= Pod::Text->new (sentence => 0, width => 78);
$parser->parse_from_file('/usr/share/perl5/Net/Jabber.pm',$io);
print $buffer;

С другой стороны, помните, что вы можете захватить вывод любой команды с помощью обратных галочек, например

$text = `/usr/bin/pod2usage /usr/share/perl5/Net/Jabber.pm`;

или qx{} для ясности:

$text = qx{/usr/bin/pod2usage /usr/share/perl5/Net/Jabber.pm};
...