【问题标题】:How can I use the range operator '..' to create a utf-8 alphabet?如何使用范围运算符“..”创建 utf-8 字母表?
【发布时间】:2011-03-05 12:39:58
【问题描述】:

有没有办法使用 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

有什么建议吗?

【问题讨论】:

标签: perl


【解决方案1】:

这在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/ 的非空字符串)的一部分,因此运算符只返回该初始值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2021-09-16
    • 2011-02-04
    • 2017-10-28
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多