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

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

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

我们在 Regex Quote-Like Operators in perlopm/PATTERN/msixpodualngc

With the m you can use any pair of non-whitespace (ASCII) characters as delimiters
[...]
When using a delimiter character valid in an identifier, whitespace is required after the m.

所以如果你想使用单词字符作为分隔符,你需要用白色space将它与运算符分开。这适用于正则表达式和非正则表达式的使用。

$ perl -le'print qq afooa'
foo

唯一不需要 m 的是斜线 (/)。
唯一不需要 q 的是撇号 (')。
唯一不需要 qq 的是引号 (").
唯一不需要 qx 的是重音符号 (`)。

显然,与所选分隔符相同的引号字符必须转义。


有用的读物​​是Gory details of parsing quoted constructs (perlop)

可以在 Programming Perl 中的第 2 章 Pick Your Own Quotes 下找到一般引用的简化直接规则 点点滴滴(第3版)

... any nonalphanumeric, nonwhitespace delimiter may be used

参考 table 很像 in perlop

虽然这直接来自 Camel,请注意在运算符和字符串之间使用 space 我们 也可以使用字母数字分隔符 ,如开头所示.在 use utf8; Unicode may be used as well, thanks to ysth 下。

感谢 ikegami 的评论和编辑。


由于问题是关于确切的规则,我想指出我在文档中找不到一个全面的声明。虽然这里的第一个引用是完整的,但它指的是 Regex 的使用。 perlop 中有关一般 Quote-Like 运算符的前一节未指定定界符(但适用相同的规则)。