Как получить цветной вывод с помощью printf и Perl's Term :: ANSIColor? - PullRequest
11 голосов
/ 15 марта 2010

есть ли способ получить с printf цветной вывод?

#!/usr/bin/perl
use warnings; 
use strict;
use Term::ANSIColor;

printf "%4.4s\n", colored( '0123456789', 'magenta' );

Вывод: (только перевод строки)

Ответы [ 6 ]

19 голосов
/ 15 марта 2010

Полагаю, вы хотите что-то вроде следующего:

#!/usr/bin/perl
use warnings;
use strict;
use Term::ANSIColor;

print colored( sprintf("%4.4s", '0123456789'), 'magenta' ), "\n";
10 голосов
/ 15 марта 2010

Вам нужно изменить код, например Следующий

printf "%s\n", colored( '0123456789', 'magenta' );

Потому что мы не можем получить первые 4 символ в строке. Если вы даете строковое значение для printf Функция будет печатать значение до нулевой символ Мы не можем получить первый 4 символа.

6 голосов
/ 15 марта 2010

Проблема в "% 4.4s \ n", попробуйте "% s \ n", это сработает. причина в том, что цвета - это символы (escape-символы), а вы их обрезаете. попробуйте printf "% s \ n", длина (цветная ('0123456789', 'зеленая')); чтобы лучше понять.

5 голосов
/ 06 марта 2014

Самый простой способ распечатать цветной вывод может быть

use Term::ANSIColor qw(:constants);
print RED, "Stop!\n", RESET;
print GREEN, "Go!\n", RESET;
2 голосов
/ 15 июня 2017

Это решение для сохранения выравнивания пробелов при печати нескольких значений (например, из БД):

print sprintf("%-10s %-32s %-10s\n",
  $row->{id},
  $row->{name},
  ($row->{enabled} ? colored(sprintf("%-10s", 'Enabled'), 'GREEN') : 'Disabled'),
);
2 голосов
/ 15 мая 2014

Если вы хотите использовать цвета при печати, сделайте следующее:

use Term::ANSIColor qw(:constants);

А затем используйте названия конкретных цветов.

Например: Если вы хотите напечатать текст жирным зеленым цветом, используйте: print GREEN BOLD "Passed", RESET;.

RESET возвращает цвет к нормальному.

Если вы хотите напечатать текст мигающим красным цветом, используйте: print BLINK BOLD RED "Failed!", RESET;

Если вы хотите отобразить индикатор выполнения, например, используя зеленую «рамку», используйте: print ON_GREEN " ", RESET;

Еще один твик: если вы хотите переместить курсор по экрану, используйте: print "\033[X;YH";, где X - позиция pos, а Y - позиция столбца, например: print "\033[5;7H";

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