Perl-программа для печати Unicode из шестнадцатеричного значения

Я начинаю с Perl и не понимаю, как отображать символы Unicode с учетом шестнадцатеричной строковой переменной.

#!/usr/bin/perl
use warnings;

foreach my $i (0..10000) {
    my $hex = sprintf("%X", $i);
    print("unicode of $i is \x{$hex}\n");
}
print("\x{2620}\n");
print("\x{BEEF}\n");

Выдает мне предупреждение: Illegal hexadecimal digit '$' ignored at perl.pl line 9.

и значение не печатается для \x{$hex}


person Questioner    schedule 20.08.2018    source источник


Ответы (3)


Как chr($num), так и pack('W', $num) создает строку, состоящую из одного символа с указанным значением, как это делает "\x{XXXX}".

Таким образом, вы можете использовать

print("unicode of $i is ".chr(hex($hex))."\n");

или просто

print("unicode of $i is ".chr($i)."\n");

Обратите внимание, что ваша программа не имеет смысла без

use open ':std', ':encoding(UTF-8)';
person ikegami    schedule 21.08.2018

Ага. Вы не можете этого сделать. Никакая переменная интерполяция не разрешена в середине такого \x. Однако вы можете использовать chr() для получения этого символа.

person Randal Schwartz    schedule 20.08.2018

ответ Рэндала правильный. Для получения дополнительной информации вы можете прочитать perluniintro.

Оттуда вы можете найти, например:

Во время выполнения вы можете использовать:

 use charnames ();
 my $hebrew_alef_from_name
                      = charnames::string_vianame("HEBREW LETTER ALEF");
 my $hebrew_alef_from_code_point = charnames::string_vianame("U+05D0");
person jwd    schedule 21.08.2018