首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么q/a/等于q/a/?

为什么q/a/等于q/a/?
EN

Stack Overflow用户
提问于 2016-12-12 17:50:55
回答 2查看 292关注 0票数 2

以下示例打印“相同”:

代码语言:javascript
复制
if (q/\\a/ eq q/\a/) {
    print "SAME\n";
}
else {
    print "DIFFERENT\n";
}

我知道这与文档是一致的。但我认为这种行为是不可取的。是否需要用单引号来避免lilteral的反弹?如果我想要2次回击,我需要指定4;这似乎不方便。

Perl不应该检测反斜杠是否用作转义字符吗?例如,如果反斜杠不位于分隔符前面,则应将其视为文字;如果是这样,则不需要3个反斜杠来表示两个,例如,

代码语言:javascript
复制
q<a\\b>

而不是

代码语言:javascript
复制
q<a\\\b>.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-12 17:57:48

是否有必要避免单引号的反弹?

是的,如果反斜杠后面跟着另一个反斜杠,或者是字符串中的最后一个字符:

代码语言:javascript
复制
$ perl -e'print q/C:\/'
Can't find string terminator "/" anywhere before EOF at -e line 1.
$ perl -e'print q/C:\\/'
C:\

这样就可以在单引号字符串中包含任何字符,包括分隔符和转义字符。

如果我想要2次回击,我需要指定4;这似乎不方便。

实际上,您只需要三个(因为第二个反斜杠没有后面跟着另一个反斜杠)。但作为另一种选择,如果字符串包含大量反斜杠,则可以使用一个单引号,它不需要转义:

代码语言:javascript
复制
my $path = <<'END';
C:\a\very\long\path
END

chomp $path;
print $path; # C:\a\very\long\path

请注意,下面的文档在末尾添加了一个换行符,您可以用chomp删除它。

票数 11
EN

Stack Overflow用户

发布于 2016-12-12 18:05:03

在单引号字串中,

反斜杠表示反斜杠,除非后面跟着分隔符或另一个反斜杠,在这种情况下,分隔符或反斜杠被内插。

换句话说,

  • 必须转义分隔符。
  • 您必须转义\,后面跟着\或分隔符。
  • 您可以转义没有后面跟着\或分隔符的\

所以,

代码语言:javascript
复制
q/\//      ⇒   /
q/\\\\a/   ⇒   \\a
q/\\\a/    ⇒   \\a
q/\\a/     ⇒   \a
q/\a/      ⇒   \a

是否有必要避免单引号的反弹?

是的,如果后面跟着另一个反斜杠或分隔符。

如果我想要2次回击,我需要指定4

三个就够了。

这似乎不方便。

它比双引号更方便,因为反斜杠必须总是被转义。单引号字符串需要尽可能少的转义量,而不失去生成分隔符的能力。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41106607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档