为什么这个示例代码没有正常工作?
#/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";
我希望获得相同输出线的三倍。
答案 0 :(得分:5)
对于第一个正则表达式,您可以使用:
$a = "aaa%29";
$a =~ s/%([0-9A-F]{2})/chr(hex($1))/gie;
print "a $a \n";
我不知道你要用sprintf
做什么。
(使用use warnings;
或-w
作为perl
的选项启用代码中的警告。sprintf
调用无效。)
答案 1 :(得分:5)
如果您尝试解码网址,我猜您应该使用uri_unescape
模块中的URI::Escape
功能。
或使用类似s{%([0-9A-F]{2})}{chr(hex($1))}egi
的内容。
答案 2 :(得分:1)
'“','\','x','2','9','”'是用于创建单字符字符串的字符串文字的Perl代码。
'\','x','2','9'是一个不同的序列,它永远不会传递给Perl解析器,更不用说了。此外,sprintf
不会特别对待“\”。它知道的所有逃脱都以“%”开头。
这就是为什么你没有获得相同的输出。