Perl,将字符串拆分为Key:使用小写键而不使用临时数组的哈希值

Sta*_*eek 2 perl hash

给定一串Key:Value对,我想创建一个查找散列但是键的小写值.我可以使用此代码完成此操作

my $a="KEY1|Value1|kEy2|Value2|KeY3|Value3";
my @a = split '\|', $a;
my %b = map { $a[$_] = (  !($_ % 2) ? lc($a[$_]) : $a[$_])  } 0 .. $#a ;
Run Code Online (Sandbox Code Playgroud)

生成的Hash看起来像这个Dumper输出:

$VAR1 = {
          'key3' => 'Value3',
          'key2' => 'Value2',
          'key1' => 'Value1'
        };
Run Code Online (Sandbox Code Playgroud)

是否可以直接创建哈希%b而不使用临时数组@a,或者是否有更有效的方法来实现相同的结果?

编辑: 我忘了提到我不能使用外部模块.它需要是基本的Perl.

Gri*_*nnz 5

您可以使用List :: Util中的pairmap来完成此操作而无需中间数组.

use strict;
use warnings;
use List::Util 1.29 'pairmap';
my $str="KEY1|Value1|kEy2|Value2|KeY3|Value3";
my %hash = pairmap { lc($a) => $b } split /\|/, $str;
Run Code Online (Sandbox Code Playgroud)

注意:你不应该在sort(或List :: Util对函数)块之外使用$ a或$ b.它们是排序的特殊全局变量,只是my $a在范围内声明可以破坏该范围内的所有排序(和List :: Util对函数).一个简单的解决方案是立即替换他们$x$y无论何时你发现自己开始用它们作为例子变量.