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

String 如何使用Perl转换混合字符串中的八进制字符值?,string,perl,octal,stringescapeutils,String,Perl,Octal,Stringescapeutils,我需要使用Perl(v5.10)来处理来自另一个应用程序的字符串,其中嵌入了空格、逗号和其他非字母数字字符的八进制值 例如:“11624\0040SE\00405th\0040St\0054\0040Suite\0040100”应该是“11624 SE第五街,100号套房” 我可以用“echo-e”在Linux命令行中完成我想要的任务,但我需要能够在Perl脚本中进行处理和操作 axiar@formdev$echo-e“11624\0040SE\00405th\0040St\0054\0040S

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

例如:“11624\0040SE\00405th\0040St\0054\0040Suite\0040100”应该是“11624 SE第五街,100号套房”

我可以用“echo-e”在Linux命令行中完成我想要的任务,但我需要能够在Perl脚本中进行处理和操作

axiar@formdev$echo-e“11624\0040SE\00405th\0040St\0054\0040Suite\0040100”

第五街东南11624号100室

我已经看过String::Escape模块,但它似乎没有达到我认为应该达到的效果

use String::Escape qw(backslash unbackslash);
my $strval="11624\0040SE\00405th\0040St\0054\0040Suite\0040100";
my $output=unbackslash($strval);
printf("%s\n",$strval);
printf("%s\n",$output);
我在Google和Stack Overflow上搜索过很多类似的问题/答案,但还没有发现任何类似的问题/答案


非常感谢您的专家帮助。

在正则表达式中,这类事情通常很容易做到:


$perl-E'say shift=~s[\\0([0-7]{1,3})][chr oct$1]egr''11624\0040SE\00405th\0040St\0054\0040Suite\0040100'
第五街东南11624号100室


这样可能更容易。

看起来八进制部分总是3个字符长,所以我将
\\0([0-7]{1,3})
改为
\\0([0-7]{3})
。谢谢!像Perl正则表达式一样工作。我确实与软件供应商确认过,八进制部分始终为3位数,因此我同意安东的建议。但多亏了你们两个!