【问题标题】:Perl `map`: When to use EXPR vs. BLOCK form?Perl `map`:何时使用 EXPR 与 BLOCK 形式?
【发布时间】:2014-04-28 04:02:11
【问题描述】:

这里是 Perl 新手。

Perl documentation for map 显示了两种使用形式:

  • map BLOCK LIST
  • map EXPR, LIST

我不完全理解两者之间的语义差异。我什么时候应该选择一种形式而不是另一种形式? EXPR 表单是否将我限制为一个表达式,而BLOCK 表单允许我有多个语句(更复杂的逻辑)?

【问题讨论】:

    标签: perl map


    【解决方案1】:

    除了语法之外的唯一区别是花括号引入的范围。例如,

    >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。
    • 糟糕,shell 正在扩展 $x -- 需要单引号而不是双引号。
    • @Richard Hansen,您似乎没有正确格式化您的 shell 的命令。
    • 所以EXPR 表单允许像BLOCK 表单这样的多个语句?如果是这样,我将如何在EXPR 表单中执行以下操作:map({chomp; $_} @lines)?
    • 我认为不需要说一个接受一个表达式,另一个接受一个块。固定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多