【问题标题】:String interpolation in perlperl中的字符串插值
【发布时间】:2012-12-08 19:11:51
【问题描述】:

我是 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:

之后我做了一些其他的调整,但没有任何效果。我的程序有什么问题?我不明白。有没有办法让它工作?

【问题讨论】:

    标签: perl string-interpolation widechar


    【解决方案1】:

    你可以这样写:

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

    你的原始程序的问题是 perl 不能评估 "\x{...}" 因为这个评估是在 $num 的插值之前完成的。

    【讨论】:

    • 它的工作。谢谢你。 eval 是函数吗?
    • 生成一个 Perl 程序,编译并运行它是非常过分的。
    • 使用eval() 是非常糟糕的形式。如另一个答案所示,请考虑使用 chr() 函数。
    • 此程序仅用于教育用途。我在回答“我正在学习……”这件事。当然 char 是一个更好的解决方案,但他的程序并不意味着生产质量......我以为他正在尝试使用 \x{} 语法......
    【解决方案2】:

    你想要

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2021-04-23
      • 2013-03-24
      • 2011-11-15
      相关资源
      最近更新 更多