2012-01-05 52 views
0

如何以类似于以下格式的表格形式在perl中显示?在perl中用水平线和多行单元格绘制表格

主机名HostIPs域名解析服务器NSIps

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

$主机名,@hostIps,$域名,@nservers,@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 
+2

这怎么不是“显示方式[你]想” ? – 2012-01-05 15:21:32

回答

2

就包括新行到单元格的值:

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

非常感谢,它工作!我从来不知道我们可以使用join内部的add方法。 – Maxwell 2012-01-05 15:39:42

+0

@Maxwell以这种方式使用['join'](http://perldoc.perl.org/functions/join.html)在Perl中相当普通。只需等到您了解[Schwartzian转换](http://google.com/search?q=Schwartzian+transform)如何工作即可。 – 2012-01-05 16:08:50

+0

@BradGilbert:是的,我是Perl新手,所以需要时间来学习它,直到我写出它才会学习。是的,当我试图实现域和子域的排序时,我确实遇到了Schwartzian变换。它非常棒! – Maxwell 2012-01-05 16:13:20

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 
+0

工具:我修改了我原来的帖子,我需要显示的方式。对于host1, 有ip1,1p2..ipn。我该如何显示它? – Maxwell 2012-01-05 15:29:38

+0

@Maxwell:我不认为'Text :: Table'足够复杂,以至于不知道每个主机都有多个ips等。但是,你所要做的就是循环每个主机的每个ip并建立列表以通过到'添加'。为空白单元格使用单个空间。 – toolic 2012-01-05 15:36:54

+1

感谢队友我把它展示得像我想要的一样。 – Maxwell 2012-01-05 15:41:52