m''
的定界符时,会排除哪些转义序列的匹配,并且为什么。在perlop中,关于插值的描述提到:
但是,在perlre中找到的转义序列的测试表明,并非所有转义序列的处理方式相同。此阶段不执行任何插值。在解析正则表达式时,将处理任何反斜杠序列,包括
\\
。
因此,我已经测试了perlre中“转义序列”部分列出的所有简单转义,发现有些“关闭”,而有些“开启”。似乎“打开”和“关闭”之间与perlrebackslash中的“字符转义”和“转义修改器”描述之间有一种对应关系。到目前为止,我尚未测试该页面上列出的所有可能转义,只测试了这两个组中的一些转义。
即使我测试了所有可能的转义字符,我仍不确定为什么当插值关闭时某些转义字符仍然有效,而其他转义字符却无效。有人可以启发我吗?
更新:如@tchrist建议的那样,这里是一些示例。 我基本上使用以下shell代码的变体来针对来自STDIN的某些用户输入进行测试:
perl -e "use 5.012; while(<>) { say 'YES' if m'\t';}"
当在非插值匹配结构中使用转义字符 \e
, \f
, \n
, \r
和 \t
,例如 m'\t'
(等等),它们仍然会匹配特殊字符而不是字面字符串表示。这与我在使用插值匹配形式时看到的匹配行为相同(例如 m/\t/
),这就是我所说的“工作”的意思。
另一方面,像 \L
, \U
, \l
和 \u
这样的修饰符在 m''
中与 m//
中的功能不同。例如,m'\uthis'
不匹配输入:"This is a string," 而 m/\uthis/
可以匹配这样的输入。第一种形式可以匹配输入:"\uthis is a string."