如何使用 Perl 转换混合字符串中的八进制字符值?

How to convert octal character values in a mixed string with Perl?

我需要使用 Perl (v5.10) 来处理来自另一个应用程序的字符串,其中嵌入了空格、逗号和其他非字母数字字符的八进制值。

例如:这个 - “11624[=29=]40SE[=29=]405th[=29=]40St[=29=]54[=29=]40Suite[=29=]40100”,应该是这个 - “11624 SE 5th St, Suite 100”。

我可以使用 "echo -e" 在 Linux 命令行中完成我要查找的内容,但我需要能够在 Perl 脚本中进行处理和操作。

axiar@formdev$echo -e “11624[=29=]40SE[=29=]405th[=29=]40St[=29=]54[=29=]40Suite[=29=]40100”

11624 SE 5th St, 套房 100

我查看了 String::Escape 模块,但它似乎没有按照我的想法执行。

use String::Escape qw(backslash unbackslash);
my $strval="11624[=10=]40SE[=10=]405th[=10=]40St[=10=]54[=10=]40Suite[=10=]40100";
my $output=unbackslash($strval);
printf("%s\n",$strval);
printf("%s\n",$output);

我已经做了很多 Google 和 Stack Overflow 搜索类似的 questions/answers 但还没有遇到任何。

我们将不胜感激您的专家协助。

这类事情通常很容易在正则表达式中完成:

$ perl -E 'say shift =~ s[\0([0-7]{1,3})][chr oct ]egr' '11624[=10=]40SE[=10=]405th[=10=]40St[=10=]54[=10=]40Suite[=10=]40100' 11624 SE 5th St, Suite 100

那样可能更容易。