我有一个$ string,包括斜杠之后的特殊字符,例如“1234 \\ n567 \\ t”;
注意“\\ n”和“\\ t”都是两个char,而不是三个char。因此,当它们显示时,它们显示为“\ n”和“\ t”。
出于某种原因,我需要将字符串更改为:“1234 \ n567`efg \ t”。如何以简单的方式做到这一点? 这是我的代码,我认为可以改进:
@src_array = split(//, $string);
@des_array = ();
$size = $#src_array + 1;
$converting = 0;
for ($i = 0, $j = 0; $i< $size; $i++){
if ($converting == 1) {
# convert and replace '\\n' with '\n'
$des_array[$j++] = $slash_char{$src_array[$i]};
$converting = 0;
}
elsif ($src_array[$i] == '\\'){
$converting = 1;
}
else {
$des_array[$j++] = $src_array[$i];
}
}
my %slash_char = (
'a' => '\a',
'b' => '\b'
...
);
答案 0 :(得分:3)
为什么不:
s/\\n/\n/g;
s/\\t/\t/g;
使用tr///
会很好,但是不能将两个字符转换为一个字符。
答案 1 :(得分:3)
嗯,简单的方法是使用String::Escape:
use String::Escape 'unbackslash';
my $string = "1234\\n567\\t";
my $new_string = unbackslash($string);