如何将数组[key1,val1]映射到perl中的散列{key1 => val1}?

qod*_*nja 4 arrays perl hash map key-value

问题是我有一个数组,其键值对作为数组中的元素,我必须以某种方式将它们拆分为散列中的key => value对.

我的第一次尝试是有效的,但我认为它非常混乱 - 我必须得到数组的所有其他元素,然后过滤以找到接受的键来创建一个哈希与

my $HASH;
my $ARRAY = [ key1, val1, key2, val2, __key3__, val3, __key4__, val4 ];
   my @keys = map{ $ARRAY[ $_*2   ] } 0 .. int($#ARRAY/2);
   my @vals = map{ $ARRAY[ $_*2+1 ] } 0 .. int($#ARRAY/2);

   my $i = 0;
   #filter for keys that only have __key__ format
    for $key (@keys){
      if( $key && $key =~ m/^__(.*)__$/i ){
       $HASH{$1} = $vals[$i];
      }
     $i++;
    }
   # only key3 and key4 should be in $HASH now
Run Code Online (Sandbox Code Playgroud)

我发现这个示例代码我认为接近我正在寻找的但我无法弄清楚如何在数组上实现类似的东西而不是迭代文本文件的行:

$file = 'myfile.txt'
open I, '<', $file
my %hash;
%hash = map { split /\s*,\s*,/,$_,2 } grep (!/^$/,<I>);
print STDERR "[ITEM] $_ => $hash{$_}\n" for keys %hash;
Run Code Online (Sandbox Code Playgroud)

你们中的任何人都可以帮助我理解最好的方法吗?即使我可以以某种方式将所有元素连接成一个字符串,然后拆分每一秒的空格令牌 - 这也可能有用,但现在我卡住了!

rou*_*ier 12

这很容易:

use strict; use warnings;
use YAML;

my $ARRAY = [qw(key1 val1 key2 val2 __key3__ val3 __key4__ val4)];
my $HASH =  { @$ARRAY };

print Dump $HASH;
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp>
---
__key3__: val3
__key4__: val4
key1: val1
key2: val2

  • 请将裸字列表转换为qw列表,裸字是魔鬼的玩具. (3认同)

Kei*_*son 7

my $ARRAY = [ qw(key1 val1 key2 val2 key3 val3 key4 val4) ];
my $HASH = { @$ARRAY };
Run Code Online (Sandbox Code Playgroud)