通常脚本都是运行在Linux 终端的, 脚本输出也都是无格式的纯文本信息, 对于perl 的标准输出也是如此。 但是, 有时我们会想突出一下输出内容,希望能高亮显示一些文本内容, 或对部分文本加粗。Perl 对此提供了很号的支持. Perl 内置了ANSIColor 模块儿, 可以对终端输出的文本进行高亮显示, 但是仅限于linux 终端.
1. Perl 语言支持颜色输出
颜色输出可以用于print 和 printf 语句
use warnings
;
use Term
::ANSIColor
qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
printf
"\n\n perl 支持的颜色类型 \n\n";
printf BOLD
"BOLD\n";
printf CLEAR
"CLEAR\n";
printf DARK
"DARK\n";
printf UNDERLINE
"UNDERLINE\n";
printf UNDERSCORE
"UNDERSCOPRE\n";
printf BLINK
"BLINK\n";
printf REVERSE
"REVERSE\n";
printf CONCEALED
"CONCELED\n";
printf BLACK
"BLACK\n";
printf RED
"RED\n";
printf GREEN
"GREEN\n";
printf YELLOW
"YELLOW\n";
printf BLUE
"BLUE\n";
printf MAGENTA
"MAGENTA\n";
printf CYAN
"CYAN\n";
printf WHITE
"WHITE\n";
printf ON_BLACK
"ON_BLACK\n";
printf ON_RED
"ON_RED\n";
printf ON_GREEN
"ON_GREEN\n";
printf ON_YELLOW
"ON_YELLOW\n";
printf ON_BLUE
"ON_BLUE\n";
printf ON_MAGENTA
"ON_MAGENTA\n";
printf ON_CYAN
"ON_CYAN\n";
printf ON_WHITE
"ON_WHITE\n";
2 最佳实践
在笔者进行perl 脚本开发时,通常会将一个字符串中的某个关键字进行高亮显示,为了提高代码的重用性,笔者抽象出了一个模块儿.
2.1 封装成模块儿
模块儿名称: sout.pm模块儿目录: /usr/share/perl/mylib
package sout
;
use Term
::ANSIColor
qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
sub line{
die "print_color 方法需要至少两个参数" if @_ <2;
my $line = shift
@_;
@patterns = @_;
my $spectors = (shift
@_) . '+';
foreach(@_){
$spectors .= "|$_+";
}
my @arrays = split
(/($spectors)/, $line);
for my $item(@arrays){
if("@patterns" =~ $item){
print BOLD RED
$item;
} else {
print $item;
}
}
print "\n";
}
1;
2.2 使用方式
use lib
"/usr/share/perl/mylib";
use sout
;
sout
::line
("java linux javascript hello", "hell", "java");