字符串表示与perl中的值之间的差异

Qia*_* Li 0 perl encoding

我对以下区别感到困惑.

$str="\xd6\xd0";
decode("GBK",$str);
Run Code Online (Sandbox Code Playgroud)

$str="d6d0";
@list=map "\\x".$_,unpack("(a2)*", $str);
$str=join "", @list;
decode("GBK",$str);
Run Code Online (Sandbox Code Playgroud)

为什么在第一种情况下,它打印出角色,而在第二种情况下,它不起作用?如何在后一种情况下使其工作?

非常感谢.

cjm*_*cjm 5

如果你想"d6d0"变成"\xd6\xd0",你想要pack 'H*':

my $str = "d6d0";
$str = pack('H*', $str);
decode("GBK",$str);
Run Code Online (Sandbox Code Playgroud)

join 不解释转义序列,它只是连接字符串.