読者です 読者をやめる 読者になる 読者になる

Perlでキーの配列と値の配列からハッシュを作る

ハッシュスライスを使うのが一般的。

@keys = qw(k1 k2 k3);
@vals = qw(v1 v2 v3);

@hash{@keys} = @vals;

print "$key:$val\n" while ($key,$val) = each(%hash);

出力

k2:v2
k1:v1
k3:v3


@hash{'k1','k2','k3'}はリスト、($hash{k1},$hash{k2},$hash{k3})を返します。これらは左辺値でもあるので、

@hash{'k1','k2','k3'} = ('v1','v2','v3');

は以下のリスト代入と等価になります。

($hash{k1},$hash{k2},$hash{k3}) = ('v1','v2','v3');


ハッシュスライス(もちろん配列スライスもあります)は非常に強力な機能です。
知らない人からすると「Perlは暗号、何書いてるかわからん」となってしまうのですが。