我有像
这样的数组中的数据$a[0] = (a1,b1,c1);
$a[1] = (a2,b2,c2); # and so on
我想创建一个哈希,其中第一个元素是键,第二个和第三个元素是值
所以a1 => b1和a2 => b2
感谢任何帮助
if (open(MYFILE, "Task1.txt")) {
@airportdata = <MYFILE>;
close(MYFILE);
} else {
print "The File Does Not Exist!\n";
exit 1;
}
答案 0 :(得分:3)
尝试以下操作,它将为您提供一个填充数组引用的哈希值。我假设第一个值是关键。
use strict; use warnings;
my %airportdata;
open(my $fh, '<', "Task1.txt") or die $!;
while (my $line = <$fh>) {
chomp $line;
my @fields = split /,/, $line;
$airportdata{$fields[0]} = [ @fields[1,2] ];
}
close($fh);
__END__
%airportdata = (
'a1' => ['b1', 'c1'],
'a2' => ['b2', 'c'],
);
您应始终use strict
和use warnings
。检查open
是否工作得很好,但我更改了它以使代码更具可读性。此外,始终使用三参数open
。
此外,我正在使用数组切片同时访问字段1和2,返回一个列表。
答案 1 :(得分:0)
这是另一个例子
use strict;
use warnings;
my @likeafile=(q(a1, b1, c1),
q(a2, b2, c2),
q(a3, b3, c3),
q(antelope, brisket, cloud));
my %hash=();
for my $l (@likeafile) {
my @a=split(/\s*,\s*/,$l);
$hash{$a[0]} = [@a[1..2]];
}
#simple access example
my $key="a3";
my $first=$hash{$key}[0];
my $second=$hash{$key}[1];
print "FAIL $first $second \n" unless ($first eq 'b3' and $second eq 'c3');
#find all 3rd elements that are longer than 3 characters
for my $key (keys %hash) {
my $second=$hash{$key}[1];
print "$second\n" if (length($second) > 3);
}