这是小代码
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
}
};
我无法弄清楚为什么会这样?请帮忙。
答案 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),
};