2011-03-05 70 views
5

有沒有辦法使用Perl'..'操作符創建UTF-8字母數組?如何使用範圍運算符'..'創建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 

有什麼建議?

+1

關於編碼雜注的建議:http://stackoverflow.com/q/492838#493508 – daxim 2011-03-05 20:49:34

回答

15

這是提到 - 簡要 - 在range operator docs。 您需要使用ordchr功能:

#!/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/),所以操作符只是返回該初始值。