簡體   English   中英

為什么我的Perl腳本無限循環?

[英]Why does my Perl script loop infinitely?

我開發了一個腳本(主要是通過訪問多個解決方案並將我最喜歡的內容混在一起)來查找和替換文件中的單詞。 這些文件都包含在目錄中。 由於某種原因,我的腳本進入了無限循環,但是看起來可以正常工作。

我希望您能解釋為什么它不會退出循環。

#!/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;
}

這就是為什么在編寫Perl時(以及使用strict )應始終啟用警告的原因:

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

應該

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

前者將在每個循環中將$i設置$i +1 (即1),但總是小於$count (在您的情況下),因此循環不會退出。

當您想知道為什么某些變量沒有您期望的值時,請開始檢查這些值:

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

您會立即看到,您並沒有像想象中那樣增加$i

這是基本的調試實踐。 深入研究該程序,直到達到發現它沒有達到自己所想的水平為止。 驗證每一步的所有內容。

並且,打開警告。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM