命名perl5模块和子例程的允许符号是什么?

时间:2019-01-16 22:41:11

标签: perl

[A-Za-z]::表示模块名称

[A-Za-z_-]表示子例程名称?

P.S。我正在写正则表达式来解析一些调试输出。

1 个答案:

答案 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}}后跟带有大括号的单词(例如^)。这些都没有用于我可以回忆起的可标记的子例程。