使用List :: Util进行哈希分配

时间:2012-03-07 09:47:22

标签: perl

这是小代码

use List::Util qw(first);

my $x = {FOO => undef};
my @array = (1,2,3,4,5,6,7,8,9);

$x->{FOO} =
    {
        'INFO' => first { $_ eq 1 } @array,
        'TI' => first { $_ eq 2 } @array,
    };

它没有创建嵌套哈希 - 匿名hashref FOO只有一个密钥对。这是o / p

$VAR1 = {
          'FOO' => {
                     'INFO' => 1
                   }
        };

我无法弄清楚为什么会这样?请帮忙。

1 个答案:

答案 0 :(得分:3)

first函数具有&@的原型,这意味着它将块和列表作为参数。块之后的所有内容都用作列表。因此,您的代码等同于:

$x->{FOO} = {    
    'INFO' => first { $_ eq 1 } (@array, 'TI' => first { $_ eq 2 } @array),
};

您可以将整个first表达式放入parens中,也可以使用匿名子语句:

$x->{FOO} = { 
    'INFO' => first(sub { $_ eq 1 }, @array),
    'TI'   => first(sub { $_ eq 2 }, @array),
};