Perl unicode格式化问题

nin*_*aaa 0 unicode perl

为什么这个示例代码没有正常工作?

#/usr/bin/perl

$a = "aaa%29";
$a =~ s/%/\\x/g;
print "a  $a \n";
$b = "aaa\x29";
print "b  $b \n";
$c = sprintf($a);
print "c  $c \n";
Run Code Online (Sandbox Code Playgroud)

我希望得到相同输出线的三倍.

Mat*_*Mat 5

对于第一个正则表达式,您可以使用:

$a = "aaa%29";
$a =~ s/%([0-9A-F]{2})/chr(hex($1))/gie;
print "a  $a \n";
Run Code Online (Sandbox Code Playgroud)

我不知道你想要做什么sprintf.(在您的代码中打开警告use warnings;或使用或-w作为选项传递perl.sprintf调用无效.)


gpv*_*vos 5

如果您正在尝试解码URL,我猜,您应该使用模块中的uri_unescape函数URI::Escape.

或者使用类似的东西s{%([0-9A-F]{2})}{chr(hex($1))}egi.