如果我有以下数组
my @header_line = ('id', 'name', 'age');
如何从中创建等效于下面一行的哈希?
my %fields = { id => 0, name => 1, age => 2};
我想这样做的原因是我可以使用有意义的名称而不是魔法数字作为索引。例如:
$row->[$fields{age}]; # rather than $row->[2]
答案 0 :(得分:15)
my %fields;
@fields{@header_line} = (0 .. $#header_line);
答案 1 :(得分:6)
my %fields = map { $header_line[$_] => $_ } 0..$#header_line;
答案 2 :(得分:2)
您在回复评论中说,这是来自Text :: CSV。这个模块有一种方法可以将它导入哈希。
$csv->column_names( @header_line );
$row = $csv->getline_hr( $FH );
print $row->{ 'id' };
答案 3 :(得分:1)
my %fields = ();
for (my $i = 0; $i < scalar(@header_line); $i++) {
$fields{$header_line[$i]} = $i;
}
答案 4 :(得分:0)
TIMTOWTDI
my %fields = ();
foreach my $field(@header_line)
{
%fields{$field} = scalar(keys(%fields));
}