【发布时间】:2014-10-09 11:39:43
【问题描述】:
我的 Perl 脚本中有一个变量,它保存字符串的第一个字母,其中该字符串以 utf-8 编码。我在从文件读取的过程中分配了这个变量。我试图将这个变量指向的字母大写。但是,以下似乎没有效果:
# $first_letter is already assigned to "á". Now we apply uc to it
$first_letter = uc $first_letter;
但是,我在我的脚本中进行了以下测试
if ( $first_letter eq "á" ) {
my $first_letter1 = "á";
printf(
"Upper case first_letter: %s Upper case first_letter1: %s \n",
encode_entities( uc $first_letter ),
encode_entities( uc $first_letter1 )
);
}
然后打印出来:
Upper case first_letter: á Upper case first_letter1: Á
所以我们可以看到,当我将变量显式分配给“á”时,将 uc 应用于它是有效的,但是我通过读取文件分配的变量有些不同(即使 $first_letter eq “á”)
如果我确保它们彼此相等,如何将 uc 应用于 $first_letter 和 $first_letter1 产生不同的值?
【问题讨论】:
-
你的脚本是
use utf8吗?您是否尝试过将$first_letter直接与$first_letter1进行比较? -
我怀疑您的示例并未准确显示程序中发生的情况
-
当我比较 $first_letter 和 $first_letter1 时,它们在将 uc 应用于它们之前是 eq,但在将 uc 应用于它们之后它们不再是 eq。是的,我的脚本确实使用 utf8。据我所知,我准确地代表了这种情况。
-
查看
$first_letter实际包含的内容可能会有所帮助。考虑显示use Devel::Peek; print Dump $first_letter, Dump $first_letter1;生成的附加输出