2011-05-24 83 views
0

你好,我似乎有這個if語句的問題。它在邏輯上看起來像是有效的。我想要它做的是看看數組是否被定義,如果它被定義看是否匹配。但是每當我輸入一個不匹配的詞仍然似乎正在進入if語句。如果語句在Perl中失敗

if(@split_array and ($split_array[0] eq "cd" or $split_array[0] eq "set" or $split_array[0] eq "alias" or $split_array[0] eq "last"or $split_array[0]))    
{ 



} 
+3

你猜這最後'或$ split_array [0]'部分被用於測試? – Sean 2011-05-24 20:40:36

+0

最後一個$ split_array [0]是什麼?這似乎會導致問題。 – rkg 2011-05-24 20:41:22

+0

這肯定是一個錯字,我現在修復它 – 2011-05-24 20:45:54

回答

10
... or $split_array[0] 

這部分意味着,如果你有定義,在$split_array[0]一個值,而不是零或爲空,如果你將永遠是正確的。

嘗試一些格式以便更容易發現錯誤。就像這樣:

if (
    @split_array and 
    (
     $split[0] eq "cd" or 
     $split[0] eq "set" or 
     $split[0] eq "alias" or 
     $split[0] eq "last" or 
     $split[0] 
    ) 
) 
{ ... } 
4
or $split_array[0])) 

在聲明的末尾。你沒有比較它,所以我猜這對任何單詞都是正確的。

+0

謝謝!,我沒有注意到。我現在修好了 – 2011-05-24 20:45:28

+0

嗯,這個人首先回答問題,他提出的解決方案工作,OP確認,並且正確的標記轉到另一個答案。有趣。 (簡單的TLP,這不是攻擊) – sidyll 2011-05-24 21:13:51

+0

@sidyll,該檢查不是針對* one *正確答案或* first *正確答案,而是針對OP認爲是最好的**答案。很多時候,這屬於解決當前問題的額外步驟,但提供有關該問題和/或解決方案的信息。在這種情況下,雖然肯德里克有正確的答案,但TLP表明,簡單的代碼易讀性會使問題從一開始就顯而易見。 – 2011-05-24 21:35:13

5

你爲什麼不嘗試:

if (@split_array and $split_array[0] =~ /^(?:cd|set|alias|last)$/) 
{ 
    # ... 
}