2

次のようなコードがあります。

print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;
%hJobT = map { $_ => 1 } %hJobT;
print "key $_ - $hJobT{$_}\n" foreach keys %hJobT;

プログラムを実行して結果を印刷すると、次のようになります。

key office - 1
key recon - 1
key office - 1
key 1 - 1
key recon - 1

最初の 2 つの結果は、最初の print ステートメントからのものであり、予期されたものです。

そのkey 1 - 1部分は期待されていません。

明確にするために-コードはループ内にあり、反復すると、特定の条件でキー値が増加します。テストの目的で、ループの最後に exit ステートメントを配置して、最初の反復結果のみを表示するようにしました。したがって、それらは「1」です。(私が無意味に 1 を 1 にマッピングしているようには見えません。) 1 対 1 のマッピングが得られる理由について何か考えはありますか?

4

1 に答える 1

12

ハッシュは偶数のリストです。したがって、リスト コンテキストで使用すると、次のすべてのキーと値が得られます。

@list = qw(a b);
%hash = @list;   # valid!
@list = %hash;   # valid, but bad style. And the ordering may change

したがって、ハッシュを への引数として使用するとmap、次のリストが作成されます。

(
   office => 1,
   1      => 1,
   recon  => 1,
   1      => 1
)

map見たから

("office", 1, "recon", 1)

それはリスト引数です。

于 2012-10-05T14:11:21.880 に答える