为什么这个if/else总是正确的?
问题描述:
任何颜色的输入返回“绿色” :(为什么这个if/else总是正确的?
sub next_traffic_lights {
my ($x) = @_;
if ($x == "red") {
return "green";
}
elsif ($x == "green") {
return "yellow";
} else {
return "red";
}
}
答
在Perl ==
意味着numerical equivalence其中eq
是字符串等价。你只需要翻转这些==
到eq
做正确的比较。
两个"red"
和"green"
等于数值为零,所以他们使用数值比较考虑这里是相同的。
在编写这样的代码时,无论如何你都应该转向查找表,因为这基本上是一个简单的状态机:
my %next_light = (
"red" => "green",
"yellow" => "red",
"green" => "yellow"
);
sub next_traffic_lights {
return $next_light{$_[0]};
}
如果你已经使用'use strict;使用警告;',Perl会告诉你。 – melpomene