Как я могу использовать оператор диапазона '..' для создания алфавита utf-8? - PullRequest
5 голосов
/ 05 марта 2011

Есть ли способ создать алфавитный массив UTF-8 с помощью оператора Perl '..'?

Например, этот не будет работать:

$ 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 Ответ

15 голосов
/ 05 марта 2011

Это кратко упоминается в документах оператора диапазона .Вам необходимо использовать функции 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/), поэтому оператор просто возвращает это начальное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...