为什么这个if / else总是如此?

时间:2017-10-21 18:16:26

标签: perl

无论输入的颜色是什么,它都会返回"绿色" :(

sub next_traffic_lights {
  my ($x) = @_;
  if ($x == "red") { 
    return "green";
  } 
  elsif ($x == "green") {
    return "yellow";
  } else {
    return "red";
  }
 }

1 个答案:

答案 0 :(得分:2)

在Perl中==表示numerical equivalence其中eq字符串等效。您只需将==翻转到eq即可进行正确的比较。

"red""green"在数值上均等于零,因此使用数字比较将它们视为相同。

在编写这样的代码时,无论如何都应该转向查找表,因为这基本上是一个简单的状态机:

my %next_light = (
  "red" => "green",
  "yellow" => "red",
  "green" => "yellow"
);

sub next_traffic_lights {
  return $next_light{$_[0]};
}