1

我有一个@fields数组,其中包含$record中制表符分隔值的名称(例如,它可能是从文件的记录 0 填充的)。

数组条目的顺序对应于记录中值的顺序。

我想为记录中的每个值填充% hash字段 => 值条目。

有没有单行线可以做到这一点?我不知道如何同时协调遍历@fieldssplit("\t", $record)列表。

我能想到的最好的办法是

my %hash;
my @values = split("\t", $record);
for my $field (@fields) {
    my $value = shift @values;
    $hash{$field} = $value;
}

但我怀疑有一种更简单的方法可以做到这一点。

谢谢。

4

2 回答 2

4

有——这是哈希切片符号:

@values = split /\t/, $record;
@hash{@fields} = @values;

或者

@hash{@fields} = split /\t/, $record;
于 2012-09-17T20:49:26.450 回答
0

这有效:

@hash{@fields} = @values;

例如:

my @fields = qw[one two three four];
my @values = (1, 2, 3, 4);

my %hash;
@hash{@fields} = @values;

use Data::Dumper;
print Dumper(\%hash);

输出:

$VAR1 = {
      'three' => 3,
      'one' => 1,
      'two' => 2,
      'four' => 4
    };
于 2012-09-17T20:48:09.743 回答