2010-01-22 115 views
0

如何在不将Perl作为转义字符的情况下打印地址字符串?我不想通过添加更多转义字符来更改字符串。如何防止Perl将解释为转义字符?

+3

你能发布是造成该问题的代码? – 2010-01-22 06:44:04

+2

对不起,你会走运。 '\\'是转义字符,如果你想要一个字面值,你必须转义它。 – 2010-01-22 07:07:25

+0

@Chris:bzzt! :) – Ether 2010-01-22 07:37:05

回答

0

这取决于你在逃避什么,但类似Quote的操作员可能会提供帮助。

请参阅perlop手册页。

7

你在问什么叫做插值。见"Quote-Like Operators"文档在perldoc perlop,但更具体地做到这一点是与被称为“这里的文档”的语法方式结合单引号:

单引号表示将文本与没有字面上的处理对其内容进行插值。这与单引号字符串类似,只是反斜杠没有特殊含义,\被视为两个反斜杠,而不是像其他每个引用构造中的反斜杠那样。

这是在perl中引用的唯一形式,不需要担心转义内容,这是代码生成器可以并且很好利用的东西。

例如:

my $address = <<'EOF'; 
[email protected]\with\backslashes\all\over\theplace 
EOF 

您可能希望在其他各种报价运营商如qwqq(正如我上面提到的在同一文件)读了起来,因为它们是很常用的并为其他更加冗长的逃避内容的方式做好速记。

+0

我也想过那个!出于某种原因,我认为它仍然会插入反斜杠。愚蠢的Python使我混淆了我的字符串插值。 (唯一需要注意的是这会增加一个可能不希望的数据末尾添加新行) – 2010-01-22 07:52:30

+0

@Chris:确实,在这种情况下,substr()或chomp()会很好地修理它。 – Ether 2010-01-22 08:07:09

+3

但是,不要忘记,你可以逃避'和\甚至在单引号的字符串。我应该改变文档以指出这一点。 :) – 2010-01-22 18:49:26

1

使用单引号。例如

print 'lots\of\backslashes', "\n"; 

lots\of\backslashes

如果你想插变量,使用.运算符,如

$var = "pesky"; 
print 'lots\of\\' . $var . '\backslashes', "\n"; 

请注意,您必须在年底转义反斜线字符串。

作为替代方案,你可以使用join

print join("\\" => "lots", "of", $var, "backslashes"), "\n"; 

我们可以给更多有用的答案,如果你想给我们的示例代码。

0

使用backslah两次,

print "This is a backslah character \\";