2017-10-21 36 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

相關問題