2012-09-17 24 views
1

我有一個數組@fields含有$記錄爲製表符分隔值的名稱(它可能已被從文件記錄0填充,例如)。讀取一個TSV記錄到Perl散列

數組條目的順序對應於記錄中值的順序。

我想填充%散列field =>值記錄中每個值的條目。

有沒有一個這樣做?我不知道如何協調遍歷@fields拆分(「\ t」,$記錄)列表併發。

盡我所能想出是

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

但我懷疑還有一個更簡單的方法來做到這一點。

謝謝。

回答

4

有 - 這是hash slice符號:

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

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

完美 - 謝謝。 – Chap

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 
    };