提问人:Kodiologist 提问时间:4/26/2017 最后编辑:Kodiologist 更新时间:7/25/2017 访问量:816
Perl 5 的 pick-your-own-quotes 运算符的法定分隔符是什么?
What are the legal delimiters for Perl 5's pick-your-own-quotes operators?
问:
Perlop 提供了可用于 、 、 等的分隔符的各种示例,包括 、 、 和 (以 而不是 自身结束)。但是,允许的规则究竟是什么?我注意到您不能使用空格或字母(编辑:如果您在操作员名称后放置空格,则允许使用字母)。q
qq
s
'
/
#
{
}
答:
我们在 perlop 下的 Regex Quote-Like Operators 中m/PATTERN/msixpodualngc
使用 ,您可以使用任何一对非空格 (ASCII) 字符作为分隔符
[...]
在标识符中使用有效的分隔符字符时,在 之后需要空格。m
m
因此,如果要使用单词字符作为分隔符,则需要用空格将其与运算符分开。这适用于正则表达式和非正则表达式使用。
$ perl -le'print qq afooa'
foo
唯一不需要的是固相线 ()。
唯一不需要的是撇号()。
唯一不需要的是引号 ()。
唯一不需要的是重音()。m
/
q
'
qq
"
qx
`
显然,必须对与所选分隔符相同的引号字符进行转义。
一个有用的读物是解析引号结构的血腥细节 (perlop)
一般引用的简化直接规则可以在 Programming Perl 中找到,在第 2 章 Bits and Pieces(第 3 版)中的 Pick Your Own Quotes 下
...可以使用任何非字母数字、非空格分隔符
参考表格,很像 Perlop 中的表格。
虽然这直接来自 Camel,但请注意,通过使用运算符和字符串之间的空格,我们还可以使用字母数字分隔符,如开头所示。在Unicode下也可以使用,这要归功于ysth。use utf8;
感谢 ikegami 的评论和编辑。
由于问题是关于确切的规则,我想指出,我在文档中找不到一个全面的陈述。虽然这里的第一个引用是完整的,但它指的是正则表达式使用。上一节中关于一般的 Quote-Like 运算符未指定分隔符(但适用相同的规则)。perlop
评论
use utf8;
)
s///
s◆pattern◆◆replacement◆
q«foo»
use utf8;
评论
q{a}
q}a}
perlop
)a
q{...}
q}...}
q{{}}
{}
q}{}}