2011-04-11 62 views
0

我有這樣的代碼跳過與#處理文件。怎麼了?

while (defined (my $line = <FILE>)) { 

    if ($line =~ /^#/) { next; } 

    $line =~ /^(\w+);(\w+);.*$/; 
    $user_map{$2} = $1; 
} 

開始行,我會覺得這個代碼做了同樣的

while (defined (my $line = <FILE>)) { 

    unless ($line =~ /^#/) { 
    $line =~ /^(\w+);(\w+);.*$/; 
    $user_map{$2} = $1; 
    } 

} 

但事實並非如此。

最後一個代碼有什麼問題?

更新:用實際代碼替代# do stuff

+6

詳細評論會發生什麼以及兩個版本之間的差異。至於* I *可以看到代碼應該實際執行相同的操作。 – 2011-04-11 12:57:48

+3

我沒有看到任何會導致差異的東西。你如何看待他們的行爲不同?你能提供一個你得到不同結果的輸入例子嗎? – 2011-04-11 13:41:17

+2

你的模式的「。* $」部分沒有做任何有用的事情,所以它不應該在那裏:-) – tadmc 2011-04-11 16:13:09

回答

0

這兩個代碼塊應該行爲相同。檢查是否有任何錯別字。

+0

你是對的。他們實際上也是這樣做的。我不知道他們之前爲什麼不這樣做。 – 2011-04-11 15:00:19