【问题标题】:Print embedded Pod as formatted text with termcap escapes使用 termcap 转义将嵌入式 Pod 打印为格式化文本
【发布时间】:2025-12-01 05:05:01
【问题描述】:

我正在尝试将嵌入式 Pod 作为 ANSI 文本输出到终端。在 Perl 5 中,我可以使用 Pod::Text::Termcap:

use strict;
use warnings;
use Pod::Text::Termcap;

my $str = do {local $/; <DATA>};
my $parser = Pod::Text::Termcap->new();
$parser->parse_string_document( $str, \*STDERR );

__DATA__

=head1 SYNOPSIS

my_test_command I<filename> [OPTIONS]

=head1 ARGUMENTS

=over 4

=item I<filename>

File name to test

=back

=head1 OPTIONS

=over 4

=item B<--help>

Prints help

=back

=head1 DESCRIPTION

A sample test command with embedded Pod

输出

我试图在 Perl 6 中实现同样的效果:

use v6;

%*ENV<POD_TO_TEXT_ANSI> = 1;
my @lines;
for $=pod -> $pod-block {
    for $pod-block.contents -> $pod-item {
        use Pod::To::Text;
        push @lines, pod2text($pod-item);
    }
}
say @lines.join("\n\n");

=begin pod

=head1 SYNOPSIS

my_test_command I<filename> [OPTIONS]

=head1 ARGUMENTS

=item I<filename>

File name to test

=head1 OPTIONS

=item B<--help>

Prints help

=head1 DESCRIPTION

A sample test command with embedded Pod

=end pod

输出

正如所见,Perl 6 输出中缺少 ANSI termcap 转义。如何在 Perl 6 中获得 ANSI 功能,例如粗体和带下划线的文本?

【问题讨论】:

  • 我不确定 POD_TO_TEXT_ANSI 是否适用于 Pod::To::Text。文档说it applies to p6doc,确实如此。我必须检查来源,看看它是否符合您的要求,但原则上没有任何说明。
  • 对于初学者来说,你可以说 pod2text(=pod);结果将是相同的。查看the source,POD_TO_TEXT_ANSI 似乎只影响formatting_to_text(它使用来自Terminal::ANSIColor 的colored)。这就叫代码。但即使我添加了一些代码,它似乎也不起作用。问题是,它也不适用于 perl6 --doc,也就是说,没有颜色。所以恐怕你一个人在这里......

标签: raku termcap


【解决方案1】:

Pod::To::Text 接受一个环境变量POD_TO_TEXT_ANSI 来开启它。但是,如果在解析 perl 6 代码之前加载了选定的 Pod::To 模块,则在 DOC 移相器中设置该环境变量可能为时已晚。

【讨论】:

    【解决方案2】:

    关于你的问题:

    如何在 Perl 6 中获得 ANSI 功能,例如粗体和带下划线的文本?

    您可能想提供Terminal::ANSIColor a try,但您需要自己添加ANSI 转义码;它不会在 POD 上自动运行

    【讨论】: