2010-10-26 74 views
1

我開發了一個腳本(主要通過訪問多個解決方案並將我的最愛混合在一起)來查找和替換文件中的單詞。這些文件都包含在一個目錄中。出於某種原因,我的腳本進入了一個無限循環,但看起來它的工作原理。爲什麼我的Perl腳本無限循環?

我將不勝感激任何解釋爲什麼它不會退出循環。

#!/usr/bin/perl -i.bak 
my $DIRECTORY = '/home/mrk28/testing/findreplace'; 
opendir (DIR, $DIRECTORY); 
@count = readdir(DIR); 
my $count = @count; 
print $count-2; 
my $i = 0; 
while ($i < $count) { 
    s/prods55a/sapprda/; 
    $i=+1; 
    print; 
} 

回答

13
$i=+1; 

應該

$i+=1; # or, ++$i; 

前者將設置$i+1(即1)在每一個循環,這總是小於$count(你的情況),所以循環韓元退出。

+0

謝謝。顯然,我是perl的新手。 – MikeKusold 2010-10-26 20:21:53

15

這就是爲什麼你應該總是讓warnings書寫時的Perl(以及使用strict):

$ perl -e 'use warnings; my $i; $i =+ 1' 
Reversed += operator at -e line 1.
5

當你想知道爲什麼有些變量沒有你所期望的價值,開始檢查值:

while ($i < $count) { 
    s/prods55a/sapprda/; 
    $i=+1; 
    warn "\$i is now $i\n"; 
    print; 
    } 

你會馬上看到你沒有像你認爲的那樣遞增$i

這是一個基本的調試練習。深入研究這個計劃,直到你達到你發現它沒有達到你想象的水平。在每一步驗證一切。

然後打開警告。 :)