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))但我上面关于转义序列的变量插值的问题仍然存在.
插值不是递归的,所有内容都是从左到右插入一次.因此,在\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)