首先,哈希只能有一个唯一键,所以当你的 CSV 文件中有这样的行时:
key1,val11,val12,val13,val14,val15,val16,val17,val18,val19
key1,val21,val22,val23,val24,val25,val26,val27,val28,val29
将带有“key1”键的两个键/值对添加到哈希后,您将只得到一对保存在哈希中,即稍后添加到哈希中的一对。
所以要保留所有记录,你可能需要哈希数组的结果结构,其中每个哈希的值是一个数组引用,像这样:
@result = (
{ 'key1' => ['val11','val12','val13','val14','val15','val16','val17','val18','val19'] },
{ 'key1' => ['val21','val22','val23','val24','val25','val26','val27','val28','val29'] },
{ 'and' => ['so on'] },
);
为了实现你的代码应该变成这样:
use strict;
use warnings;
my @AoH; # array of hashes containing data from CSV
my $in2 = "metadata1.csv";
open IN2, "<$in2" or die "Cannot open the file: $!";
while (my $line = <IN2>) {
my @string_bits = split (/,/, $line);
my $key = $string_bits[0]; # first element - key
my $value = [ @string_bits[1 .. $#string_bits] ]; # rest get into arr ref
push @AoH, {$key => $value}; # array of hashes structure
}
foreach my $hash_ref (@AoH)
{
my $key = (keys %$hash_ref)[0]; # get hash key
my $value = join ', ', @{ $hash_ref->{$key} }; # join array into str
print "The key is '$key' and the array is '$value'\n";
}