Perl字符串插值可以执行任何表达式评估吗?

nop*_*ole 34 perl string-interpolation

与问题相关:如何用Perl中的计算表达式替换?

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

$a = 1;
print "#{$a + 1}";
Run Code Online (Sandbox Code Playgroud)

它可以打印出来2吗?

Gre*_*ill 58

在Perl中有类似的简写:

$a = 1;
print "@{[$a + 1]}"
Run Code Online (Sandbox Code Playgroud)

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

  • 还有另一个选项`"$ {\\($ a + 1)}"`但我更喜欢以前的可读性. (4认同)
  • 我认为你不需要逃避反斜杠.我试过这个并且它可以工作:`"$ {\($ a + 1)}"` (4认同)
  • @ Hynek-Pichi-Vychodil`print“ $ {\\(Cwd :: cwd)}”;`get`SCALAR(0x28b7124)`,`print“ $ {\(Cwd :: cwd)}”;`get`C :/用户/管理员/ IdeaProjects / untitled2` (2认同)

cjm*_*cjm 10

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

还有Interpolation模块,它允许您对要插值的值(如编码HTML实体)进行任意转换,以及评估表达式.