Text::ASCIITable 是一个用来将数据以纯文本格式的表格形式输出的 Perl 模块,表格样式简洁明了,而且可以灵活地自定义,非常适合命令行程序。我的这个 CLI 脚本需要将 Hash Ref 输出到终端,简单地使用 print 输出最多只能达到能看的效果,但是使用 Text::ASCIITable 能够做到一目了然。这个模块的接口也非常简单,稍微看看 POD 和 Example 就能上手。
use strict;
use warnings;
use Text::ASCIITable;
my @attrs = qw/NAME AUTHOR BIRTH VERSION WEBSITE/;
my @langs =
(
['Perl','Larry Wall','1987','5.18.2','http://www.perl.org'],
['Python','Guido Van Rossum','1991','2.7.6','http://www.python.org'],
);
my $t = Text::ASCIITable -> new({ headingText => 'Program Languages', drawRowLine => 1 });
$t -> setCols( @attrs );
for my $lang ( @langs ) {
$t -> addRow( @$lang );
}
print $t;
Text::ASCIITable还有很多选项,比如上面这段有用到的 drawRowLine 会在每行数据后打印一条分割线。经常会使用的还会有:
上面的结果中,数字自动向右对齐了,可是我希望版本号被当作字符串处理,向左对其,可以加一句 $t->alighCol('VERSION','left')
。除此之外,表头也能用 alignHeadRow
或者 alignColName
来处理。
有时候一行字符太多,超过了终端宽度,可以用 setColWidth
来限制列宽,还可以使用 drawPage
来分页显示。
- alignCol
- setColWidth
具体使用方式和选项,代码的POD里有详细描述,基本上能够满足一般使用需求。如果要UTF-8,颜色等更加丰富的功能,可以使用另外一个模块 Text::ANSITable 。
ref: link