为什么在Perl的字符串插值过程中,变量名后跟下划线未正确计算?

Sha*_*iar 7 perl string-interpolation double-quotes

为什么在Perl的字符串插值过程中,变量名后跟下划线未正确计算?

my $i = 3;

print "i = $i\n"; # works, prints "i = 3"
print "_i = _$i\n"; # works, prints "_i = _3"
print "i_ = $i_\n"; # FAILS, prints "i_ = "
print "_i_ = _$i_\n"; # sort of works, prints "_i_ = _"
Run Code Online (Sandbox Code Playgroud)

Ala*_*avi 25

除了其他答案,您还可以使用替代语法来指定变量:

print "i_ = ${i}_\n";
Run Code Online (Sandbox Code Playgroud)

请注意大括号的用法:{}指定变量名称.如有疑问,您可以选择使用此语法.


Mat*_*Mat 18

$i_是一个有效的标识符,所以它试图打印该变量的值(你没有设置,所以它是undef).

打开strictwarnings.


Ita*_*mar 7

垫子是对的.如果在值使用反斜杠之后你真的需要紧跟下划线:"$i\_".

  • 我更喜欢`$ {i}`而不是反斜杠,因为他们在其他情况下做了不同的事情. (6认同)
  • 反斜杠抑制插值.变量名称周围的曲线会插入该变量的值.`print"$ {i} _ \n"`在我的眼睛和大脑上更容易,因为如果不加引号,这两件事会做同样的事情. (3认同)
  • `print'i_ ='.$ i."_ \n" 个;` (2认同)