【问题标题】:Can Perl string interpolation perform any expression evaluation?Perl 字符串插值可以执行任何表达式评估吗?
【发布时间】:2010-10-15 06:19:38
【问题描述】:

相关问题:How do I substitute with an evaluated expression in Perl?

在 Perl 中,有没有像 Ruby 一样的方法:

$a = 1;
print "#{$a + 1}";

它可以打印出2?

【问题讨论】:

    标签: perl string-interpolation


    【解决方案1】:

    Perl 中有一个类似的简写形式:

    $a = 1;
    print "@{[$a + 1]}"
    

    之所以有效,是因为[] 创建了对包含一个元素(计算结果)的数组的引用,然后@{} 取消引用该数组,它在字符串插值中按顺序打印数组的每个元素。由于只有一个,它只打印一个元素。

    【讨论】:

    • 还有另一个选项"${\\($a+1)}",但为了便于阅读,我更喜欢前者。
    • 我认为您不需要转义反斜杠。我试过了,它有效:"${\($a+1)}"
    • @Hynek-Pichi-Vychodil print "${\\(Cwd::cwd)}";getSCALAR(0x28b7124),print "${\(Cwd::cwd)}";getC:/Users/Administrator/IdeaProjects/untitled2 对我来说
    • @Hynek-Pichi-Vychodil:你介意解释一下为什么这行得通吗?
    【解决方案2】:

    您可以使用 Greg Hewgill 提到的 @{[ EXPRESSION ]} 技巧。

    还有Interpolation 模块,除了计算表达式之外,它还允许您对正在插值的值进行任意转换(如编码 HTML 实体)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多