Я начинаю с Perl и запутался в том, как визуализировать символы Юникода с помощью шестнадцатеричной строковой переменной.

#!/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}

6
Questioner 21 Авг 2018 в 02:46

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)';
8
ikegami 22 Авг 2018 в 16:56

Ответ Рэндала правильный. Для получения дополнительной информации вы можете прочитать 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");
1
jwd 21 Авг 2018 в 00:13

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

4
Randal Schwartz 20 Авг 2018 в 23:55
51939835