0

我正在尝试创建数组的哈希。我正在从 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}};

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

4

2 回答 2

3

您的代码对我有用,但问题是您正在使用密钥"group1 "(注意额外的空间),而不是"group1"像您想象的那样。当您在冒号上拆分时:,请记住从空格中删除后面的字段,而不是前面的字段。你可能应该这样做:

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

此外,您应该始终使用

use strict;
use warnings;

没有这两个 pragma 的编码是困难的并且需要更长的时间。

于 2013-08-12T10:20:15.050 回答
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;
于 2013-08-12T10:05:35.437 回答