perlのハッシュのスライスの使い方

以前も書いてたけど、実用的にというか。
例によって神から教えてもらったことです。

  • したいこと
my %hash1 = (
    k1 => 'v1',
    k2 => 'v2',
    k3 => 'v3',
);

こんなハッシュを得たとして、こいつから、

(
    h1 => 'v1',
    h2 => 'v2',
    h3 => 'v3',
);

みたいに、keyだけが違うハッシュを作りたい。頭悪い方法でやってもいいけど、スマートに行こう。

  • コード
use strict;
use warnings;
use Data::Dumper;

my %hash1 = (
    k1 => 'v1',
    k2 => 'v2',
    k3 => 'v3',
);

my %trans = (
    k1 => 'h1',
    k2 => 'h2',
    k3 => 'h3',
);

my %hash2;

@hash2{values %trans} = @hash1{keys %trans};

print Dumper \%hash2;
  • 実行結果
% perl hash_slice.pl
$VAR1 = {
          'h1' => 'v1',
          'h3' => 'v3',
          'h2' => 'v2'
        };