gpt4 book ai didi

perl - 为什么 q/\\a/等于 q/\a/?

转载 作者:行者123 更新时间:2023-12-01 05:56:13 29 4
gpt4 key购买 nike

以下示例打印“SAME”:

if (q/\\a/ eq q/\a/) {
print "SAME\n";
}
else {
print "DIFFERENT\n";
}

我理解这与 documentation 一致.但我认为这种行为是不可取的。是否需要在单引号字符串中转义反冲 literal?如果我想要 2 个反冲,我需要指定 4 个;这似乎不太方便。

Perl 不应该检测反斜杠是否用作转义字符吗?例如,当反斜杠不在定界符之前时,应将其视为文字;如果是这样的话,我就不需要 3 个反斜杠来表示两个,例如

q<a\\b>

代替

q<a\\\b>.

最佳答案

Is there a need to escape a backlash in single-quoted string?

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

$ perl -e'print q/C:\/'
Can't find string terminator "/" anywhere before EOF at -e line 1.
$ perl -e'print q/C:\\/'
C:\

这使得在单引号字符串中包含任何字符成为可能,包括分隔符和转义字符。


If I wanted 2 backlashes, I'd need to specify 4; this does not seem convenient.

实际上,您只需要三个(因为第二个反斜杠后面没有跟另一个反斜杠)。但作为替代方案,如果您的字符串包含很多反斜杠,您可以使用单引号 heredoc,这不需要转义:

my $path = <<'END';
C:\a\very\long\path
END

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

请注意,heredoc 在末尾添加了一个换行符,您可以使用 chomp 将其删除。

关于perl - 为什么 q/\\a/等于 q/\a/?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41106607/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com