为什么映射的参数之间不需要逗号?

rig*_*old 4 perl higher-order-functions

为什么以下有效?

my @ys = map { $_ * $_ } @xs;
Run Code Online (Sandbox Code Playgroud)

而以下无效?

my @ys = map { $_ * $_ }, @xs;
Run Code Online (Sandbox Code Playgroud)

map语言结构而不是真正的函数,还是有特殊的块规则?

mob*_*mob 8

是的,map是一种语言结构.

就像grep,它支持两种不同的语法:

map BLOCK LIST
map EXPR, LIST
Run Code Online (Sandbox Code Playgroud)

BLOCK在你的例子只是一个简单的表达,所以这两个语句是等价的:

my @ys = map { $_ * $_ } @xs;
my @ys = map $_ * $_, @xs;
Run Code Online (Sandbox Code Playgroud)