"map"如何解释Perl中的第一个参数?

5 perl

我对Perl的"map"功能有一些疑问.

特别:

  • 如何

    %hash = map {$ _ => 1} @array

    创建哈希映射数组的元素为1?块如何返回两个元素的列表?我以为block返回它的最后一个值.=>隐式创建一个列表,而不是","返回其正确的参数?

  • 为什么

    %hash = map($ _ => 1),@ array

    不行?我试图在这里返回两个元素的列表...在解析器的角度来看,如何在"("修复它之前预先加上"+"?

Leo*_*ans 9

问题1:映射块是运行列表上下文,因此允许返回零,一个或多个值.map将它们全部归还." ,"或" =>"在标量上下文中返回它们的右侧,但是在列表上下文中都是双方.有关详细信息,请参阅perlop.

问题2:%hash = map ($_ => 1), @array被解释为%hash = (map($_, 1), @array).换句话说,它返回(1,@ array).在%hash = map +($_ => 1), @array,+表示()不引用参数列表,因此它被解释为map(+($ _ => 1),@ array);

当天的教训:总是在地图表达中使用赞美,这样你就不会被这些问题所困扰.