Arrays 如何在Perl中使用for循环创建一个包含8个头/列和20行的哈希数组

Arrays 如何在Perl中使用for循环创建一个包含8个头/列和20行的哈希数组,arrays,perl,hash,Arrays,Perl,Hash,我是Perl的初学者,正在学习使用数组和散列。根据我所做的研究,我创建了一个数组>,其中包含一个哈希列的键和值。我不知道如何水平放置标题,并在8个标题下的每一个标题下创建行。再次感谢您的帮助 #!/usr/bin/perl # use strict; use warnings; # use 5.010; use Data::Dumper; my %Name = ( Component => 2.2 ); foreach my $name (keys %Name) { p

我是Perl的初学者,正在学习使用数组和散列。根据我所做的研究,我创建了一个数组>,其中包含一个哈希列的键和值。我不知道如何水平放置标题,并在8个标题下的每一个标题下创建行。再次感谢您的帮助

#!/usr/bin/perl
# use strict;
use warnings;
# use 5.010;
use Data::Dumper;

my %Name = (
    Component => 2.2
);

foreach my $name (keys %Name) {
    printf "%-8s %s\n", $name, $Name{$name};
}
但这就是我试图在控制台中打印的内容:头(8)和最后一个头是空的

 Type            Name                               Rev Id      ZZZ ID  IP     Group        Date Released  AA Category  Project IDs
 xxxxxComponent xyz_abc_1234LDO_c7rp1avrusevrmdtop  xxxx_2_5    99ccccc1      ABC- RIP-xxxxx    2015-05-03 6:59:09  xxxx    
 xxxxxComponent xyz_abc_1234LDO_c7rp1avrusevrmdtop  xxxx_2_5    99ccccc1    ABC  RIP xxxxx  2015-05-03 6:59:09  xxxx
 xxxxxComponent xyz_abc_1234LDO_c7rp1avrusevrmdtop  xxxx_2_5    99ccccc1    ABC RIP xxxxx   2015-05-03 6:59:09  xxxx    

首先,您需要构建一个记录数组,其中数组中的每个项都是散列引用。然后你可以循环通过这些来打印出来

下面是一个简单的例子:

use strict;
use warnings;

my @records =
( { "Type" => "Type A",
    "Name" => "Name A",
    "Group" => 1 },

  { "Type" => "Type B",
    "Name" => "Name B",
    "Group" => 2 },

 { "Type" => "Type C",
   "Name" => "Name C",
   "Group" => 2 },
  );

printf "%-8s %-8s %-2s\n",
    "Type",
    "Name",
    "Group";

for my $record (@records) {
    printf "%-8s %-8s %-2s\n",
    $record->{Type},
    $record->{Name},
    $record->{Group}
}
其中打印:

Type     Name     Group
Type A   Name A   1
Type B   Name B   2
Type C   Name C   2

Re“我创建了一个数组>,其中包含一个哈希列的键和值。”您使用一个元素创建了一个哈希。就这样。您希望如何打印您实际上没有的数据?首先解决这个问题。您的程序使用一个名为
组件的键定义一个散列。但是,现在您可以打印此
%Name
散列的整行,并且没有一个键等于
2.2
。所有的数据都来自哪里?
%Name
是否包含此数据?如何将此数据放入
%Name
?我们无法帮助您更好地理解数据和程序。谢谢Kevin,您的格式对我理解数组、键、值、哈希和for循环非常有帮助。我想用这段代码展示一下控制台中的输出:我试着用8个列名和20个不同的行来执行这段代码。我对对齐有一些问题。我试过调整“%-8s%-8s%-2s%-8s%-8s%-8s%-8s%-8s%8s\n”有更好的方法吗?例如,使用散列引用读取格式化的txt文件,并在控制台中以对齐方式显示txt文件,或者使用模块?我对安装任何Perl模块都不太熟悉。我是否可以在一个在线IDE中执行它来检查结果?我看到你在询问有关表的问题。使用Text::Table::Tiny的建议很好。所以我想这就是您试图避免安装的模块?您能解释一下您在对齐方面遇到了什么“问题”吗?是的,我没有成功安装Perl模块。我从cpan下载了Text::Table::Tiny,并尝试在cmd中安装。我解压缩了tar.gz文件并运行了Makefile.PL,但它给了我一条消息,告诉作者lib、bin、t文件夹是空的。所以在多次不成功的迭代之后,我决定使用上面的方法。但是我的第一个,三列看起来是对齐的,但是从第四列到第八列看起来不是对齐的。我发现这是因为这些数字-%8s%-8s%-2s。在编写第四列到第八列的程序时,如何确定这些数字?