>>3552 恵美 - ($x{'k1'}, $x{'k2'}) は @x{'k1','k2'} と等価 (*1)。 - ハッシュのリファレンス $y のデリファレンスは $$y{'k1'} ($y->{'k1'} と同じ)。 をふまえた上で、今回は ($$y{'k1'}, $$y{'k2'}) を代入したい ので、*1 を素直に置き換えると @$hash{'a','c'} = @$hash2{'x','z'}; となります。 てゆーか、ハッシュスライスは使わない方がいいですよ。配列と 間違えやすいので、可読性低すぎです。わたしなら 2 項目であれば $hash->{'a'} = $hash2->{'x'}; $hash->{'c'} = $hash2->{'z'}; と 2行で書きます。 どうしても短く書きたい場合でも ($hash->{'a'}, $hash->{'c'}) = ($hash2->{'x'}, $hash2->{'z'}); とします。 項目数が多いなら my %map_table = ('x'=>'a', 'z'=>'c'); while (my ($fromkey, $tokey) = each %map_table){ $hash->{$tokey} = $hash2{$fromkey}; } とか。長くはなりますが、項目の対応がもっともわかりやすく、タイプ ミス ($hash と $hash2 を書き間違えるとか) の可能性も減ります。 |