如何使用printf和Perl的Term :: ANSIColor获得彩色输出?

时间:2010-03-15 07:24:35

标签: perl colors printf

有没有办法获得printf彩色输出?

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

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

输出:(仅换行)

  

6 个答案:

答案 0 :(得分:19)

我假设您需要以下内容:

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

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

答案 1 :(得分:10)

  

您需要更改代码   以下

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

因为我们无法获得前4名   字符串中的字符。如果你给   printf的字符串值   功能它将打印值最多   空字符。我们不能得到第一个   4个字符。

答案 2 :(得分:6)

问题是“%4.4s \ n”尝试“%s \ n”它会起作用。原因是颜色是字符(逃避字符),你正在削减它们。尝试printf“%s \ n”,长度(彩色('0123456789','绿色'));要更好地理解。

答案 3 :(得分:5)

打印彩色输出的最简单方法可以是

use Term::ANSIColor qw(:constants);
print RED, "Stop!\n", RESET;
print GREEN, "Go!\n", RESET;

答案 4 :(得分:2)

如果您想在打印中使用颜色,请执行以下操作:

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是列pos,例如:print "\033[5;7H";

答案 5 :(得分:2)

This is a solution to preserve the space alignment when print multiple value (eg. from DB):

print sprintf("%-10s %-32s %-10s\n",
  $row->{id},
  $row->{name},
  ($row->{enabled} ? colored(sprintf("%-10s", 'Enabled'), 'GREEN') : 'Disabled'),
);