2017-10-21 38 views
0

任何颜色的输入返回“绿色” :(为什么这个if/else总是正确的?

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

如果你已经使用'use strict;使用警告;',Perl会告诉你。 – melpomene

回答

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]}; 
} 
+0

非常感谢,谢谢:) – Echoding

+1

轶事:在德国事情要复杂得多。红绿灯→红色→黄色→绿色→黄色→红色。 – PerlDuck

相关问题