我在一个更大的程序中有一段代码,假设要取一个字母(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";
Run Code Online (Sandbox Code Playgroud)
输出是沿着的
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
Run Code Online (Sandbox Code Playgroud)
现在我意识到在这一点上我可以从Ascii值中减去65,但我仍然想知道......发生了什么?
也许$AA包含一个不可见的字符(空格,回车).验证$AA包含您的想法:单个字符.检查这个的一种方法:
length($AA) == 1
Run Code Online (Sandbox Code Playgroud)
更先进,更丰富的检查包括:
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
print Dumper($AA);
Run Code Online (Sandbox Code Playgroud)
和
print join ' ', map { ord } split //, $AA;
Run Code Online (Sandbox Code Playgroud)
和
printf '%v02X\n', $AA;
Run Code Online (Sandbox Code Playgroud)
最后一项检查显示每个字符的序数值$AA.