Строковая интерполяция в Perl

Я новичок в Perl, я учусь с помощью O'reillys Learning Perl книга. Unicode символы (как написано в книге), как это может быть напечатан с помощью print "\x{2668}", Я использовал foreach loop распечатать диапазон символов Unicode.

Пример: с 2660 по 2670;

Я написал следующий код,

foreach $num (2660..2670)
{
        print "Character for $num  is:","\x{$num} \n";

}

Который давал следующий вывод,

Illegal hexadecimal digit '$' ignored at ./Printing_messages.pl line 10.
Character for 2660  is: 
Character for 2661  is: 
Character for 2662  is: 
Character for 2663  is: 
Character for 2664  is: 
Character for 2665  is: 
Character for 2666  is: 
Character for 2667  is: 
Character for 2668  is: 
Character for 2669  is: 
Character for 2670  is:

После этого я сделал несколько других настроек, но ничего не получалось. В чем проблема с моей программой? Я не понимаю Есть ли как заставить это работать?

2 ответа

Решение

Ты хочешь

print "Character for $num is: ", chr($num), "\n";

Вы можете написать что-то вроде:

foreach $num (2660..2670)
{
        print "Character for $num  is:",eval(qq!\"\\x{$num} \\n\"!);
}

Проблема с вашей исходной программой в том, что perl не может оценить "\x{...}", потому что эта оценка выполняется до интерполяции $num.

Другие вопросы по тегам