【发布时间】:2016-12-12 17:50:55
【问题描述】:
以下示例打印“SAME”:
if (q/\\a/ eq q/\a/) {
print "SAME\n";
}
else {
print "DIFFERENT\n";
}
我了解这与documentation 一致。但我认为这种行为是不可取的。是否需要在单引号字符串中避免反冲 lilteral ?如果我想要 2 次反冲,我需要指定 4;这似乎不太方便。
Perl 不应该检测反斜杠是否用作转义字符吗?例如,当反斜杠不在分隔符之前时,它应该被视为文字;如果是这样的话,我不需要 3 个反斜杠来表达两个,例如,
q<a\\b>
而不是
q<a\\\b>.
【问题讨论】:
-
尝试使用
q/\/,您会发现需要转义反斜杠。 -
对不起,我最初的问题并不完全清楚。我添加了单词“literal”来强调反斜杠不能用作转义字符的事实。您的示例没有反映我的问题,因为在您的情况下,根据定义,分隔符之前的反斜杠充当转义字符。
-
"当反斜杠不在分隔符之前,它应该被视为文字" 那么如何创建以反斜杠结尾的字符串呢?
q/\/-> 文字斜线,没有结束分隔符(语法错误);q/\\/-> 文字反斜杠,文字斜杠,没有结束分隔符(语法错误);q/\\\/-> 文字反斜杠、文字反斜杠、文字斜杠、没有结束分隔符(语法错误); ... -
"...如何创建以反斜杠结尾的字符串?" --- 一个优秀的用例!由于它 确实 在(关闭)分隔符之前,因此不应将其视为文字,因此需要对其进行转义。除了这个用例之外,我认为我的建议会在内部任何地方出现反冲而不是紧挨定界符时起作用。
-
除非你知道结束分隔符在哪里,否则你不能从结束分隔符向后走。
标签: perl backslash single-quotes