【发布时间】:2014-04-28 04:02:11
【问题描述】:
这里是 Perl 新手。
Perl documentation for map 显示了两种使用形式:
map BLOCK LISTmap EXPR, LIST
我不完全理解两者之间的语义差异。我什么时候应该选择一种形式而不是另一种形式? EXPR 表单是否将我限制为一个表达式,而BLOCK 表单允许我有多个语句(更复杂的逻辑)?
【问题讨论】:
这里是 Perl 新手。
Perl documentation for map 显示了两种使用形式:
map BLOCK LISTmap EXPR, LIST我不完全理解两者之间的语义差异。我什么时候应该选择一种形式而不是另一种形式? EXPR 表单是否将我限制为一个表达式,而BLOCK 表单允许我有多个语句(更复杂的逻辑)?
【问题讨论】:
除了语法之外的唯一区别是花括号引入的范围。例如,
>perl -E"use strict; map my $x = $_, 1,2,3,4; say $x"
>perl -E"use strict; map { my $x = $_ } 1,2,3,4; say $x"
Global symbol "$x" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
【讨论】:
syntax error at -e line 1, near "my ="。我正在运行 Perl v5.18.2。
$x -- 需要单引号而不是双引号。
EXPR 表单允许像BLOCK 表单这样的多个语句?如果是这样,我将如何在EXPR 表单中执行以下操作:map({chomp; $_} @lines)?