我需要将%xx的十六进制字符转换为实际字符。我尝试使用以下代码,但它不能正常工作:
#!/usr/bin/perl -w
my $cadena = "%40%61%62";
print $cadena."\n";
$cadena =~ s/%//g;
print "cad: ".$cadena."\n";
my $string =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
print "traducida: ".$string;
变更
my $string =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
to
$cadena =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
这样就可以在$cadena
上进行搜索和替换。
输出结果:@ab
40 => @
61 => a
62 => b
use strict
和use warnings
的原因。 - Dave Cross$cadena =~ s/([[:xdigit:]]{2})/chr(hex($1))/eg;
[:xdigit:]
来匹配单个十六进制字符,使用{2}
来指定恰好两个这样的字符。s/([[:xdigit:]]{2})/chr(hex($1))/eg
来避免冗长的类和冗余的代码。 - ikegamis///
左侧的$cadena
更改为my $string
,这是修复错误的相反操作! - ikegami
use warnings
和use strict
,以确保程序严谨性和可读性。 - mkHuns/([[:xdigit:]]{2})/chr(hex($1))/eg
来避免冗长的类和冗余的代码。 - ikegami