Этот вопрос связан с вопросом: Как мне раскрасить выводимый текст из скрипта Perl в Windows?
Но это немного конкретнее. Я получил кроссплатформенную окраску, работающую, в некоторой степени:
use Term::ANSIColor;
use Win32::Console;
if (!(-f STDOUT)) {
if ($^O =~ /win/) {
our $FG_BLUE;
our $FG_YELLOW;
our $FG_RED;
our $BG_GREEN;
my $CONSOLE = Win32::Console->new(STD_OUTPUT_HANDLE);
my $attr = $CONSOLE->Attr(); # Get current console colors
$blue = sub {$CONSOLE->Attr($FG_BLUE);return};
$reset = sub {$CONSOLE->Attr($attr);return};
$yellow = sub {$CONSOLE->Attr($FG_YELLOW);return};
$red = sub {$CONSOLE->Attr($FG_RED);return};
} else {
$blue = sub {return color('bold blue')};
$reset = sub {return color('reset')};
$yellow = sub {return color('yellow')};
$red = sub {return color('red')};
}
}
, но цвета терминала не меняются сразу, когда функции вызываются из внутренних строк, таким образом:
print "${\$blue->()} this is blue\n";
print "${\$blue->()}This is... not blue${\$reset->()}\n";
print "this is Blue ${\$blue->()}\n";
print "this is reset${\$reset->()}\n";
Мне интересно, возможно ли сделать такие вещи, как:
my $print_help = <<PRINT_HELP;
Usage: $toolname [-Options] [-fields name1,[name2],...]
${\$red->()} toolname version VERSION ${\$reset->()}
${\$blue->()} options: ${\$reset->()}
PRINT_HELP
print $print_help;
печать без цветов. Я попытался установить $ |= 1 без удачи.
У меня нет возможности установить Win32 :: Console :: ANSI в рассматриваемой системе, поэтому я не могу заставить какие-либо решения, использующие этот модуль, работать.