将数组转换中的键,值的顺序反转为哈希

the*_*olf 3 arrays perl hash

假设我有一个值数组,然后是键(与散列的赋值相反):

use strict;
use warnings;
use Data::Dump;

my @arr = qw(1 one 2 two 3 three 4 four 1 uno 2 dos 3 tres 4 cuatro);

my %hash = @arr;

dd \%hash;
Run Code Online (Sandbox Code Playgroud)

打印

{ 1 => "uno", 2 => "dos", 3 => "tres", 4 => "cuatro" }
Run Code Online (Sandbox Code Playgroud)

显然,在构造散列时消除了重复键.

如何反转用于构造哈希的值对的顺序?

我知道我可以写一个C风格的循环:

for(my $i=1; $i<=$#arr; $i=$i+2){
    $hash{$arr[$i]}=$arr[$i-1];
    }

dd \%hash;   
# { cuatro => 4, dos => 2, four => 4, one => 1, three => 3, tres => 3, two => 2, uno => 1 }
Run Code Online (Sandbox Code Playgroud)

但这似乎有点笨拙.我正在寻找一些更加惯用的Perl.

在Python中,我会这样做 dict(zip(arr[1::2], arr[0::2]))

TLP*_*TLP 8

用途reverse:

my %hash = reverse @arr;
Run Code Online (Sandbox Code Playgroud)

Perl中的内置函数列表位于perldoc perlfunc中.