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