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

前端之家收集整理的这篇文章主要介绍了数组 – 如何将数组[key1,val1]映射到perl中的散列{key1 => val1}?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题是我有一个数组,其键值对作为数组中的元素,我必须以某种方式将它们拆分为key =>散列中的值对.

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

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

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

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

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

解决方法

这很容易:

use strict; use warnings;
use YAML;

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

print Dump $HASH;

输出

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

猜你在找的Perl相关文章