我在一个较大的程序中有一段代码,假设要取一个字母(A ... D)并将其转换为数字(0 ... 3)。由于某种原因,它总是跳到其他地方。这是代码:
my $AA = shift @filearray;
chomp($Q);
chomp($A1);
chomp($A2);
chomp($A3);
chomp($A4);
chomp($AA);
print "1:$AA\n";
#convert answer to number
my $AB = 0;
if ($AA eq "A")
{
$AB = 0;
}
elsif ($AA eq "B")
{
$AB = 1;
}
elsif ($AA eq "C")
{
$AB = 2;
}
else {
$AB = 3;
}
print "2:$AB\n\n";
输出符合
1:B
2:3
1:A
2:3
1:D
2:3
1:C
2:3
1:D
2:3
1:B
2:3
1:B
2:3
1:A
2:3
1:D
2:3
现在我意识到我可以从Ascii值中减去65,但我仍然想知道......发生了什么?
答案 0 :(得分:6)
也许$AA
包含一个不可见的字符(空格,回车)。验证$AA
是否包含您认为的内容:单个字符。一种检查方法:
length($AA) == 1
更高级和更具信息性的检查包括:
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
print Dumper($AA);
和
print join ' ', map { ord } split //, $AA;
和
printf '%v02X\n', $AA;
最后一项检查显示$AA
中每个字符的序数值。