perl:显示原始字符串,包括特殊字符
问题描述:
我想输出一个字符串的原始文本,而不插入特殊字符。因此,举例来说,如果我的字符串是"hello\nthere"
,我想打印,而不是perl:显示原始字符串,包括特殊字符
hello
there
的字符串被存储在一个变量,我不跟文字工作,所以它不只是一个单一的事情 - 对比双引号(我不认为)。我怎样才能做到这一点?
答
Data::Dumper
的正确咒语将执行此操作。
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Useqq = 1;
$foo = "hello
there";
print Dumper $foo; # "hello\nthere"
答
这可能有助于
#!/usr/bin/perl
$str="hello\nthere";
$str =~ s/\n/\\n/;
print "$str\n";
输出:
hello\nthere
+0
这需要在每个特殊字符上运行搜索替换。 – ewok
答
我想打印出一个字符串的原始文本,没有插特殊字符。
这是不可能的。
当字符串被解析时,像\n
这样的转义序列被解释(而不是“插入”)。该字符串来源的源代码(“原始文本”)不被解释器存储,因此没有任何方法来检索它。
工具等Data::Dumper
可以产生一个字符串,它是可能通过与其等效的转义序列自动替换控制字符类似于源代码,但是这可能不是与原始源表示。例如,不必要的反斜杠(如"this\ example"
)不会出现在转储表示中,并且转义字符的非标准表示(如"\x0a"
对\n
)将被替换为标准转义字符。
顺便说一句,添加'$ Data :: Dumper :: Ident = 0;'将单线阵列和散列。 – ikegami