如何使用范围运算符'..'创建utf-8字母?

dyn*_*x60 5 perl

有没有办法使用Perl'..'运算符创建UTF-8字母数组?

例如,这个不起作用:

$ cat t.pl
#!/usr/bin/perl

use Data::Dumper;
use encoding 'utf8';

print Dumper('?'..'?'); # not working!
print Dumper('?','?','?'); # ...works fine! but needs to be filling letter by letter

$ perl t.pl
$VAR1 = "\x{410}";
$VAR1 = "\x{410}";
$VAR2 = "\x{411}";
$VAR3 = "\x{412}";

$ echo $LANG
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

有什么建议?

mar*_*ton 15

范围操作员文档中简要提到了这一点.您需要使用ordchr函数:

#!/usr/bin/perl

use Data::Dumper;
use encoding 'utf8';

my @arry = map { chr } ord( '?' ) .. ord( '?' );
for my $letter ( @arry ) {
    print "$letter ";
}
print "\n";
Run Code Online (Sandbox Code Playgroud)

输出:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Run Code Online (Sandbox Code Playgroud)

您看到的结果是因为范围的初始值不是"魔法"序列(非空字符串匹配/^[a-zA-Z]*[0-9]*\z/)的一部分,因此运算符只返回该初始值.