Perl 5 的 pick-your-own-quotes 运算符的合法分隔符是啥?
Posted
技术标签:
【中文标题】Perl 5 的 pick-your-own-quotes 运算符的合法分隔符是啥?【英文标题】:What are the legal delimiters for Perl 5's pick-your-own-quotes operators?Perl 5 的 pick-your-own-quotes 运算符的合法分隔符是什么? 【发布时间】:2017-09-22 21:21:30 【问题描述】:perlop 提供了可用于q
、qq
、s
等的分隔符的各种示例,包括'
、/
、#
和(以@ 结尾987654328@ 而不是它自己)。但究竟允许什么规则是什么?我注意到您不能使用例如空格或字母(编辑:如果您在运算符名称后放置空格,则允许使用字母)。
【问题讨论】:
您也可以使用相同的大括号/括号,qa
与qa
相同(记录在perlop
的某处)
@zdim,它们都产生a
,但q...
并不总是与q...
相同。比较q
(产生
)和q
(非法)。
【参考方案1】:
我们在Regex Quote-Like Operators in perlop 下m/PATTERN/msixpodualngc
使用
m
,您可以使用任意一对非空白 (ASCII) 字符作为分隔符 [...] 在标识符中使用有效的分隔符时,m
之后需要空格。
因此,如果您想使用单词字符作为分隔符,则需要使用空格将其与运算符分开。这适用于正则表达式和非正则表达式的使用。
$ perl -le'print qq afooa'
foo
您不需要m
的唯一一个是固相线 (/
)。
唯一不需要 q
的就是撇号 ('
)。
唯一不需要 qq
的是引号 ("
)。
唯一不需要 qx
的是重音 (`
)。
显然,必须转义与所选分隔符相同的引号字符。
一个有用的阅读是Gory details of parsing quoted constructs (perlop)
可以在Programming Perl 中的Pick Your Own Quotes 第 2 章 Bits and Pieces 中找到用于一般引用的简化直接规则(第三版)
...可以使用任何非字母数字、非空白分隔符
参考表格很像in perlop。
虽然这直接来自 Camel,但请注意,通过在运算符和字符串之间使用空格,我们也可以使用字母数字分隔符,如开头所示。在use utf8;
Unicode may be used as well 下,感谢ysth。
感谢 ikegami 提供 cmets 和编辑。
由于问题是关于确切的规则,我想指出,我在文档中找不到一个全面的陈述。虽然这里的第一个引用是完整的,但它指的是 Regex 的使用。 perlop
中关于一般 Quote-Like 运算符的前面部分没有指定分隔符(虽然同样的规则适用)。
【讨论】:
第二个引用是错误的。您可以使用字母数字分隔符,如答案的前半部分所示。 @ikegami 谢谢...我正在考虑扩充它...这是来自骆驼的文字引述...添加了注释。这很棘手,文档不一定全面。 也可以使用非ascii字符(至少在use utf8;
下)
@ysth:但是在5.20之前使用s///
,需要使用s◆pattern◆◆replacement◆
。
但是您不能使用成对的 Unicode 括号:q«foo»
会在有或没有 use utf8;
的情况下给出错误。合理,但仍然很糟糕。以上是关于Perl 5 的 pick-your-own-quotes 运算符的合法分隔符是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在linux下的如何将perl默认版本5.8.8升级为5.10