Как мне получить Perl POD в виде строки и распечатать ее на странице?

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

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

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

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


person Anandan    schedule 05.10.2009    source источник


Ответы (3)


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

person Ether    schedule 05.10.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};
person codehead    schedule 05.10.2009
comment
IO::String полезен для всех видов вещей. - person Matthew Scharley; 05.10.2009
comment
Действительно, но если вы уверены, что работаете в среде perl 5.8 или более поздней версии, вы можете вместо этого просто использовать скалярные ссылки. - person Ether; 05.10.2009
comment
Поскольку Pod::Text является производным от Pod::Simple, вы можете сказать: my $string; $parser->output_string(\$string); прямо под своей строкой Pod::Text-›new, и тогда весь вывод будет записан в $string. Pod::Text имеет гораздо больше смысла, чем обратные кавычки/qx{} IMO, поскольку он кроссплатформенный. - person Gaurav; 05.10.2009
comment
Я использую только версию 5.8.8. У меня есть весь вывод в строку. Затем, чтобы напечатать только один раздел POD (например, синопсис), нужно ли мне выполнять разбор вручную? или есть ли какие-либо модули, которые также позволяют извлечь это? - person Anandan; 05.10.2009
comment
Это точное описание Pod::Select ^_^ - person codehead; 05.10.2009

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

По сути, вы обрабатываете элементы =head1, но пропускаете те, которые не являются SYNOPSIS. Как только вы столкнетесь с правильным =head1, установите флаг и обработайте раздел, пока не столкнетесь с другим =head1, после чего вы прекратите синтаксический анализ. Вы можете делать все что угодно между =head1, включая добавление к переменной.

person brian d foy    schedule 05.10.2009