【发布时间】:2018-11-14 21:59:16
【问题描述】:
我有这个问题,当我使用彩色文本时,printf 格式(对齐)不正确。 在此示例中,请注意最后一列是如何向左 1 个空格。 搜索解决方案只告诉我它很可能与代码中颜色变量中的转义序列有关。
这个问题有一个简单的解决方案,还是我需要添加代码以在文本着色时添加空格??
代码:
#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Data::Dumper;
# Color variables
my $DEFAULTCOLOR = "\e[0m";
my $RED = "\e[31m";
my $GREEN = "\e[32m";
my $YELLOW = "\e[33m";
my $BLUE = "\e[34m";
my $MAGENTA = "\e[35m";
my %HeartbeatHash = (
'BOTH' => [ '-', 0, '-', 10 ],
'PTN' => [ '-', 0, '-', 10 ],
'PKT' => [ '-', 0, '-', 10 ],
);
printf ("%-9s %7s %-7s %-s\n", "Heartbeat", "Counter", "LastRun", "TriggerTime");
printf ("%-9s %7s %-7s %-d\n", "NOCOLOR", ${HeartbeatHash{'PKT'}[1]}, ${HeartbeatHash{'PKT'}[2]}, ${HeartbeatHash{'PKT'}[3]});
${HeartbeatHash{'PKT'}[1]}++;
${HeartbeatHash{'PKT'}[2]} = "Passed";
printf ("%-9s %7s %-7s %-s\n", "Heartbeat", "Counter", "LastRun", "TriggerTime");
printf ("%-9s %7s %-7s %-d\n", "NOCOLOR", ${HeartbeatHash{'PKT'}[1]}, ${HeartbeatHash{'PKT'}[2]}, ${HeartbeatHash{'PKT'}[3]});
${HeartbeatHash{'PKT'}[1]}++;
${HeartbeatHash{'PKT'}[2]} = "${GREEN}Passed${DEFAULTCOLOR}";
printf ("%-9s %7s %-7s %-s\n", "Heartbeat", "Counter", "LastRun", "TriggerTime");
printf ("%-9s %7s %-7s %-d\n", "GREEN", ${HeartbeatHash{'PKT'}[1]}, ${HeartbeatHash{'PKT'}[2]}, ${HeartbeatHash{'PKT'}[3]});
$DEFAULTCOLOR = "\033[0m";
$GREEN = "\033[32m";
${HeartbeatHash{'PKT'}[1]}++;
${HeartbeatHash{'PKT'}[2]} = "${GREEN}Passed${DEFAULTCOLOR}";
printf ("%-9s %7s %-7s %-s\n", "Heartbeat", "Counter", "LastRun", "TriggerTime");
printf ("%-9s %7s %-7s %-d\n", "GREEN", ${HeartbeatHash{'PKT'}[1]}, ${HeartbeatHash{'PKT'}[2]}, ${HeartbeatHash{'PKT'}[3]});
输出(终端在最后两行以绿色显示文本“通过”:
Heartbeat Counter LastRun TriggerTime
NOCOLOR 0 - 10
Heartbeat Counter LastRun TriggerTime
NOCOLOR 1 Passed 10
Heartbeat Counter LastRun TriggerTime
GREEN 2 Passed 10
Heartbeat Counter LastRun TriggerTime
GREEN 3 Passed 10
【问题讨论】:
-
你会发现Term::ANSIColor很有用。