为什么这个带有奇怪变量名的perl脚本有效?

时间:2014-07-14 19:16:18

标签: perl unicode

我在perl doc中读到的perl标识符应为word character。 (不计算特殊的perl变量)。

网上某处我看到了这个示例脚本:

use 5.018;
use utf8;

my($ , $ , $ , $ ) = (1..4);
say "$ " if( $ + $  == $ );

它没有任何错误。那么,perl允许一些“骨骼和箭头”字符作为变量名?

2 个答案:

答案 0 :(得分:6)

匹配\p{Word}的任何内容都可以在Perl中的标识符名称中使用。 Unicode标准使用该属性定义了大量字符。

use utf8 pragma很重要;告诉Perl源文件本身是以UTF-8编码的,因此这些字符可以在代码中显示为文字。

例如,代码中的一个字符是LINEAR B IDEOGRAM B254 DART。 Unicode字符数据库表示这是一个“字母,其他”,它包含在Word字符集中。

答案 1 :(得分:2)

该示例中的字符都是Lo(Letter,Other)类别。 Perl考虑这些有效的单词字符:

use open qw(:std :encoding(UTF-8));
print grep { /\w/ } ("\x{100af}", "\x{10082}", "\x{100d8}", "\x{100ae}");