1

$recordのタブ区切り値の名前を含む配列@fieldsがあります (たとえば、ファイルのレコード 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 に答える