前些日子利用公司内部项目提供的 RESTful API 封装了一个 CLI 脚本。其中用到不少有趣的 CPAN 模块,Text::ASCIITable 就是其中一个。

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 );
$t->addRow( @$_ ) for (@langs);

print $t;

以上Perl代码的输出结果如下图:

Text::ASCIITable输出纯文本表格

Text::ASCIITable还有很多选项,比如上面这段有用到的 drawRowLine 会在每行数据后打印一条分割线。经常会使用的还会有:

  1. alignCol 上面的结果中,数字自动向右对齐了,可是我希望版本号被当作字符串处理,向左对其,可以加一句 $t->alighCol('VERSION','left')。除此之外,表头也能用 alignHeadRow 或者 alignColName 来处理。

  2. setColWidth 有时候一行字符太多,超过了终端宽度,可以用 setColWidth 来限制列宽,还可以使用 drawPage 来分页显示。

具体使用方式和选项,代码的POD里有详细描述,基本上能够满足一般使用需求。如果要UTF-8,颜色等更加丰富的功能,可以使用另外一个模块 Text::ANSITable