抱歉,但我再次需要帮助来理解“Programming Perl”一书中相当复杂的片段。这是(标记为粗体对我来说晦涩难懂的内容):
模式被解析为双引号字符串,所有正常的双引号约定都将起作用,包括变量插值(除非您使用单引号作为分隔符)和用反斜杠转义指示的特殊字符。这些是在字符串被解释为正则表达式之前应用的(这是 Perl 语言中为数不多的几个地方之一,其中字符串经历了不止一次的处理)。...
这种两次解析的另一个结果是普通的 Perl 标记器首先找到正则表达式的结尾,就像它正在寻找普通字符串的终止分隔符一样。只有在找到字符串的结尾(并完成任何变量插值)之后,模式才会被视为正则表达式。除此之外,这意味着您不能“隐藏”正则表达式结构中模式的终止分隔符(例如括号字符类或正则表达式注释,我们还没有涉及)。Perl 将在任何地方看到分隔符并在该点终止模式。
首先,为什么说它Only after it has found the end of the string
不是the end of the regular expression
它正在寻找的东西,如前所述?
二、这是什么意思you can’t “hide” the terminating delimiter of a pattern inside a regex construct
?为什么我不能隐藏终止分隔符/
,而我可以将它放置在我想要的任何位置,无论是直接在正则表达式中/A\/C/
还是在插值变量中(即使没有\
):
my $s = 'A/';
my $p = 'A/C';
say $p =~ /$s/;
输出1
。
当我在写和重新阅读我的问题时,我认为这个片段讲述了使用单引号作为正则表达式分隔符,那么这一切似乎都很有凝聚力。我的假设正确吗?
我的赞赏。