使用水平线和多线单元格在perl中绘制表格

时间:2012-01-05 15:13:59

标签: perl string-formatting

如何在perl中的格式表中以下列方式显示?

主机名HostIPs DomainName名称服务器NSIps

我的数据存储在以下一行:

$ hostName,@ hostIps,$ domainName,@ nnversvers,@ nsips

hostips,nsservers和nsips是数组。 对于一个主机名 - 多个hostIps和一个域多个名称服务器,我必须以整齐的格式显示它。

我尝试使用Text :: Table,但它没有显示我想要的方式。

my $tb = Text::Table->new("hostName", "IP Address", "domainName", "nameServers", "IP  addr");
$tb->add ($hostName, @hostIps, $domainName, @nservers, @nsips);
print $tb;

任何指针?

我必须将其显示为:

hostName IP Address domainName nameServers IP  addr
host1    ip1.1        domain1    serv1.1       addr1.1   
         ip1.2                   serv1.2       addr1.2  
         ip1.3                   serv1.3       addr1.3
host2    ip2        domain2    serv2       addr2 
          ..                      ..       ..
host3    ip3        domain3    serv3       addr3   

3 个答案:

答案 0 :(得分:2)

只需在细胞值中包含换行符:

$tb->add($hostName,
         join("\n", @hostIps),
         $domainName,
         join("\n", @nservers),
         join "\n", @nsips
        );

答案 1 :(得分:1)

答案 2 :(得分:1)

对于Text::Table,您需要循环中的add行:

use warnings;
use strict;
use Text::Table;

my $tb = Text::Table->new("hostName", "IP Address", "domainName", "nameServers", "IP  addr");
for (1 .. 3) {
    $tb->add("host$_", "ip$_", "domain$_", "serv$_", "addr$_");
}
print $tb;

__END__

hostName IP Address domainName nameServers IP  addr
host1    ip1        domain1    serv1       addr1   
host2    ip2        domain2    serv2       addr2   
host3    ip3        domain3    serv3       addr3