2012-01-05 58 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