在创建Hash of Arrays时没有得到输出

时间:2013-08-12 09:50:46

标签: perl

我正在尝试创建数组的哈希值。我从txt文件中获取数据并将其转换为数组的哈希值。

Txt文件数据如下

group1 : usr1 usr4 usr6
group2 : usr2 usr1 usr5
group3 : usr1 usr2 usr3
等等......

我正在转换像

这样的数组哈希
%hash = (group1 => [usr1 usr4 usr6], group2 => [usr2 usr1 usr5]);

以下代码我正在尝试

%hash = ();
open (FH, "2.txt") or die "file not found";
while (<FH>) {
@array = split (":", $_);
$array[1] =~ s/^\s*//;
$array[1] =~ s/\s*$//;
@arrayRef = split (" ", $array[1]);
$hash{$array[0]} = [ @arrayRef ];
#print @array;
#print "\n";
}
close FH;


print $hash{group1}[0];
print @{ $hash{group2}};

我没有得到输出。代码中有问题。请帮助我更好地理解

2 个答案:

答案 0 :(得分:3)

您的代码适合我,但问题是您使用的是密钥"group1 "(请注意额外的空格),而不是您认为的"group1"。当您在冒号:上拆分时,您记得在空格之后删除字段,而不是之前的字段。你应该这样做:

my @array = split /\s*:\s*/, $_;

此外,您应该始终使用

use strict;
use warnings;

没有这两个pragma的编码很困难,需要更长的时间。

答案 1 :(得分:1)

use strict;
use warnings;

my %hash;
open (my $FH, "<", "2.txt") or die $!;
while (<$FH>) {
  my ($key, @array) = split /[:\s]+/, $_;
  $hash{$key} = \@array;
}
close $FH;

use Data::Dumper;
print Dumper \%hash;