Perl 5 的 pick-your-own-quotes 运算符的法定分隔符是什么?

What are the legal delimiters for Perl 5's pick-your-own-quotes operators?

提问人:Kodiologist 提问时间:4/26/2017 最后编辑:Kodiologist 更新时间:7/25/2017 访问量:816

问:

Perlop 提供了可用于 、 、 等的分隔符的各种示例,包括 、 、 和 (以 而不是 自身结束)。但是,允许的规则究竟是什么?我注意到您不能使用空格或字母(编辑:如果您在操作员名称后放置空格,则允许使用字母)。qqqs'/#{}

Perl 行情

评论

0赞 zdim 4/26/2017
您也可以使用相同的大括号/括号,与(记录在某处的q{a}q}a}perlop)
0赞 ikegami 4/26/2017
@zdim,它们都产生 ,但并不总是与 相同。比较(生产)与(非法)。aq{...}q}...}q{{}}{}q}{}}

答:

10赞 zdim 4/26/2017 #1

我们在 perlop 下的 Regex Quote-Like Operatorsm/PATTERN/msixpodualngc

使用 ,您可以使用任何一对非空格 (ASCII) 字符作为分隔符
[...]
在标识符中使用有效的分隔符字符时,在 之后需要空格。
mm

因此,如果要使用单词字符作为分隔符,则需要用空格将其与运算符分开。这适用于正则表达式和非正则表达式使用。

$ 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下也可以使用,这要归功于ysthuse utf8;

感谢 ikegami 的评论和编辑。


由于问题是关于确切的规则,我想指出,我在文档中找不到一个全面的陈述。虽然这里的第一个引用是完整的,但它指的是正则表达式使用。上一节中关于一般的 Quote-Like 运算符未指定分隔符(但适用相同的规则)。perlop

评论

0赞 ikegami 4/26/2017
第二句话是错误的。您可以使用字母数字分隔符,如答案的前半部分所示。
0赞 zdim 4/26/2017
@ikegami 谢谢......我正在考虑增强它......这是骆驼的字面报价......添加了注释。这很棘手,文档不一定对此很全面。
1赞 ysth 4/26/2017
也可以使用非 ASCII 字符(至少在use utf8;)
1赞 choroba 5/2/2017
@ysth:但是在 5.20 之前,您需要使用 .s///s◆pattern◆◆replacement◆
0赞 bpj 5/3/2017
但是,您不能使用成对的 Unicode 括号:给出错误,带或不带 .合理,但仍然很无赖。q«foo»use utf8;