Perl If-Elsif-Else总是去其他地方

时间:2014-03-20 02:53:08

标签: perl if-statement

我在一个较大的程序中有一段代码,假设要取一个字母(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,但我仍然想知道......发生了什么?

1 个答案:

答案 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中每个字符的序数值。