在Perl中,为什么变量插值对于十六进制转义序列失败?

sch*_*itz 3 perl interpolation escaping character sequence

在Perl中,如果我运行代码:

print "Literal Hex: \x{50} \n";
Run Code Online (Sandbox Code Playgroud)

我明白了:" Literal Hex: P"

但是,如果我运行代码:

my $hex_num = 50; 
print "Interpolated Hex: \x{$hex_num}";
Run Code Online (Sandbox Code Playgroud)

变量没有正确插值,我得到了这个:" Interpolated Hex:"

当我尝试在unicode和八进制转义序列中使用变量插值时,会产生类似的失败.

是否可以将转义序列(例如\ x,\ N)与插值字符串变量一起使用?我的印象是双引号中包含的$变量总是被插值,但这是例外吗?

注意:由于这个问题,我知道解决方法:chr(hex($hex_num))但我上面关于转义序列的变量插值的问题仍然存在.

cho*_*oba 7

插值不是递归的,所有内容都是从左到右插入一次.因此,在\x{$hex}处理时,以下适用(引自perlop):

如果大括号之间没有有效数字,则生成的字符为NULL字符("\ x {00}").

零真的存在:

perl -MO=Deparse -e '$h=50;print "<\x{$h}>"'
$h = 50;
print "<\000>";
-e syntax OK
Run Code Online (Sandbox Code Playgroud)