有没有办法使用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
有什么建议吗?
答案 0 :(得分:15)
在range operator docs中简要地提到了这一点。 您需要使用ord和chr函数:
#!/usr/bin/perl
use Data::Dumper;
use encoding 'utf8';
my @arry = map { chr } ord( 'А' ) .. ord( 'Я' );
for my $letter ( @arry ) {
print "$letter ";
}
print "\n";
输出:
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
您看到的结果是因为范围的初始值不是“魔法”序列(匹配/^[a-zA-Z]*[0-9]*\z/
的非空字符串)的一部分,因此运算符只返回该初始值。