我正在尝试创建数组的哈希值。我从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}};
我没有得到输出。代码中有问题。请帮助我更好地理解
答案 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;