Perl のハッシュで、key ではなく value でのスライシングを1行で書けますか？


python, ruby ではハッシュの要素でのスライスが1行でできますが、perl ではどうやるのでしょうか？  
「perl hash slice」 で検索しても、hash のキーでスライスする方法しか見つかりませんでした。

やりたいのは下記のようなことです。

ruby

[code]

    [6] pry(main)> hash = (0..3).map { |x| [x, x*2] }.to_h
    => {0=>0, 1=>2, 2=>4, 3=>6}
    [7] pry(main)> hash.select { |k, v| v > 2 }
    => {2=>4, 3=>6}
    
[/code]

python

[code]

    In [26]: hash = { x:x*2 for x in range(4) }
    
    In [27]: hash
    Out[27]: {0: 0, 1: 2, 2: 4, 3: 6}
    
    In [28]: { k:v for k, v in hash.items() if v > 2 }
    Out[28]: {2: 4, 3: 6}
    
[/code]

ruby も python も、(key, value) の組としてループできますが、  
perl だとリストなので、同じようには扱えなくて、悩んでいます。

自分で考えたのは、[key, value]の配列のリストに変換してから、ループする方法ですが、  
標準で用意されていないとも思えないので、質問させていただきました。




grep でフィルタして map で生成 というのが個人的にはわかりやすいかなぁと思います

[code]

    my %hash = map{ $_ => $_*2 } 0..3;
    my %hash2 = map { $_ => $hash{$_} } grep { $hash{$_} > 2 } keys %hash;
    
[/code]




grep でフィルタして map で生成 というのが個人的にはわかりやすいかなぁと思います

[code]

    my %hash = map{ $_ => $_*2 } 0..3;
    my %hash2 = map { $_ => $hash{$_} } grep { $hash{$_} > 2 } keys %hash;
    
[/code]

