2011-02-04 68 views
2

這裏是我的代碼:如果Perl不工作?

#!/usr/bin/env perl 

sub start 
{ 
    ... 
} 

sub stop 
{ 
    ... 
} 

if (defined $ARGV[0]) 
{ 
    if ($ARGV[0]=='start') {start} 
    elsif ($ARGV[0]=='stop') {stop} 
    else {die "Unrecognized command: $ARGV[0]"} 
}

無論我做什麼,雖然,它始終執行&start。難道我做錯了什麼?

我使用Linux Mint 10和Perl 5.10.1。

回答

14

您正在使用數字比較來檢查字符串相等性,在比較它們之前先將參數轉換爲數字。

在這種情況下,'開始'不是一個數字,所以它被轉換爲0; $ARGV[0](這裏預期爲單詞)中的值也被轉換,導致另一個0和最終條件if (0 == 0),這始終爲真。

你想使用eq字符串比較中的操盤手:

if ($ARGV[0] eq 'start') { start } 

對不同的運營商相比,更多信息,請參見docs

請注意(如註釋中指出的那樣),包括腳本頂部的use warnings;將導致perl從一開始就警告您。總是包括use warnings;use strict;通常是最佳實踐,因爲它有助於及早發現這些錯誤。

+9

作爲一個數字處理,'開始'與0相同,其他大多數字符串也是如此。使用`使用警告;嚴格使用;`會有幫助。 – 2011-02-04 17:23:52

+2

的確,在嚴格警告和警告打開的情況下,問題會立即彈出並顯示相關警告消息。 – Ether 2011-02-04 17:29:56