Perl If Elsif Else总是转到Else
我在一个更大的程序中有一段代码,假设它取一个字母(a…D)并将其转换成一个数字(0…3)。由于某种原因,它总是跳到另一个。代码如下:Perl If Elsif Else总是转到Else,perl,if-statement,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";
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,但我仍然想知道……发生了什么事?可能
$AA
包含一个不可见的字符(空格、回车)。验证$AA
是否包含您认为它的功能:单个字符。检查此问题的一种方法:
length($AA) == 1
更高级、信息更丰富的检查包括:
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
print Dumper($AA);
及
及
最后一项检查显示
$AA
中每个字符的序数值,可能$AA
包含不可见字符(空格、回车)。验证$AA
是否包含您认为它的功能:单个字符。检查此问题的一种方法:
length($AA) == 1
更高级、信息更丰富的检查包括:
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
print Dumper($AA);
及
及
最后一项检查显示
$AA
中每个字符的序号值,确保末尾没有空格。将打印更改为print“1:$AA:”
并查看是否在B和冒号之间打印任何内容。@Raymond我喜欢这个主意,但当我这样做时,我得到::B 2:3也不会删除任何空格?不,最多chomp
删除一个“行尾”序列(通常是\n
、\n\r
或\r
中的一种,具体取决于您的操作系统)。常见的问题是获取在Windows上创建的文件(行尾\r\n
)并在Unix中处理(行尾\n
).Linux中的chomp
将只删除\n
,在每行末尾留下一个\r
。@Mob在研究了如何使用正则表达式删除EOL字符后,我发现行=~s/[\r\n]+$/;感谢您的帮助。请确保末尾没有任何空格。将打印更改为print“1:$AA:”
并查看是否有任何东西在B和冒号之间打印。@RaymondChen我喜欢这个想法,但当我这样做时,我得到::B 2:3也不会删除任何空格?不,最多chomp
删除一个“行尾”序列(通常是\n
,\n\r
或\r
中的一个,取决于您的操作系统)。一个常见问题是获取在Windows上创建的文件(行尾\r\n
)并在Unix中处理它(行尾\n
).Achomp
在Linux中只会删除\n
,在每一行的末尾留下一个\r
。@Mob在研究了如何使用regex删除EOL字符后,我发现行=~s/[\r\n]+$/;谢谢你的帮助。看起来确实有隐藏的字符。当我运行你提供的内容时,我得到了1:B$VAR1=“B\r”;66 13 42.0D\n 2:3.不应该从空白处删除\r吗?@traisjames:不一定。请参阅我上面的评论。看起来确实有隐藏字符。当我运行您提供的内容时,我得到1:B$VAR1=“B\r”;66 13 42.0D\n 2:3.不应该从空白处删除\r吗?@traisjames:不一定。请参阅我上面的评论。