>是吗
模块名称的[A-Za-z]
和::
和子例程名称的[A-Za-z_-]
?
附言我正在编写正则表达式来解析一些调试输出。
参见 perlvar; 由于命名子例程只是包存储中的变量,因此它们与其他变量具有相同的标识符要求。 Perldata拥有完整的细节。请记住,只要您use utf8;
激活,unicode 字符在标识符中就有效,这将从 UTF-8 解码您的源代码。
包名称只是变量名称的一部分,因此它们具有相同的限制,并且它们可以包含::
或'
分隔符,但是对于您use
的任何模块,这里都有一个额外的实际限制,因为这会将其转换为文件名,然后取决于您的文件系统支持的内容。CPAN 工具链的许多部分也无法处理非 ASCII 包名称。所以这通常不是一个好主意。这里有一些 Acme 模块可以试水。
本质上:
- 如果
use utf8
未处于活动状态,则标识符可能包含"ASCII 范围内的任何单词字符,只要第一个字符不是数字"。这里的"字"字是指[a-zA-Z0-9_]
。 - 如果
use utf8
处于活动状态,则标识符可能以 Unicode"开始"字符或下划线开头,后跟 Unicode "继续"字符。此外,所有字符都必须是 unicode 字字符。
-
连字符在任何标识符中都无效(下面提到的标点符号标识符除外)。
还有"特殊标识符",它们主要由特殊的Perl全局变量组成:全数字变量,由单个标点字符组成的变量,由^
后跟字母组成的变量,以及由^
后跟带有所需大括号的单词组成的变量(例如@{^CAPTURE}
)。这些都不用于我能回忆起的符号可选子例程。