是
[A-Za-z]
和::
表示模块名称
和[A-Za-z_-]
表示子例程名称?
P.S。我正在写正则表达式来解析一些调试输出。
答案 0 :(得分:4)
请参见perlvar;由于命名子例程只是程序包存储中的变量,因此它们与其他变量具有相同的标识符要求。 perldata包含完整的详细信息。请记住,只要您启用了use utf8;
就能从UTF-8解码您的源代码,则unicode字符在标识符中才有效。
包名称只是变量名称的一部分,因此它们具有相同的限制,并且可以包含::
或'
分隔符,但是对于您{{ 1}},因为这会将其转换为文件名,然后由您的文件系统支持。 CPAN工具链的许多部分也不具备处理非ASCII包名称的功能。因此,通常这不是一个好主意。这里有一些Acme modules测试水域。
本质上:
use
未激活,则标识符可以由“ ASCII范围内的任何单词字符组成,只要第一个字符不是数字”。此处的“文字字符”是指use utf8
。[a-zA-Z0-9_]
处于活动状态,则标识符可以以unicode“开始”字符或下划线开头,后跟unicode“ continue”字符。另外,所有字符都必须是unicode字字符。 use utf8
连字符在任何标识符中均无效(下面提到的标点标识符除外)。
也有“特殊标识符”,它主要由特殊的Perl全局变量组成:全数字变量,由单个标点符号组成的变量,由-
后跟字母的变量以及由{组成的变量{1}}后跟带有大括号的单词(例如^
)。这些都没有用于我可以回忆起的可标记的子例程。