short: проблема, вероятно, в том, как вызывается ваш пейджер (например, less ).
long: perldoc использует жестко закодированные через Pod :: Text :: Color и, в свою очередь, Term :: ANSIColor , например,
# Make level two headings bold.
sub cmd_head2 {
my ($self, $attrs, $text) = @_;
$text =~ s/\s+$//;
$self->SUPER::cmd_head2 ($attrs, colored ($text, 'bold'));
}
# Fix the various formatting codes.
sub cmd_b { return colored ($_[2], 'bold') }
sub cmd_f { return colored ($_[2], 'cyan') }
sub cmd_i { return colored ($_[2], 'yellow') }
# Output any included code in green.
sub output_code {
my ($self, $code) = @_;
$code = colored ($code, 'green');
$self->output ($code);
}
и поскольку все движущиеся части скрыты в библиотеке perl, вы не могли бы ничего сделать, чтобы сломать это. В отличие от нескольких других модулей Perl, этот, кажется, игнорирует значение для TERM
.
С другой стороны, perldoc использует для пейджер . На странице руководства написано
"perldoc" will use, in order of preference, the pager defined in
"PERLDOC_PAGER", "MANPAGER", or "PAGER" before trying to find a pager
on its own. ("MANPAGER" is not used if "perldoc" was told to display
plain text or unformatted pod.)
Если вы установили PAGER
на less
, то он будет использовать это значение. Но less
будет отображать escape-символы, как показано в вашем примере, если вы не добавите в команду опцию, например, -R
. Выполнение этого для PAGER
может создавать помехи для других приложений, поэтому perldoc
сначала ищет свою собственную переменную PERLDOC_PAGER
.