2014-10-30 48 views
-2

我正在用Perl寫一個程序。我在一個循環中調用一個sub。在調用子程序之後,程序停止循環遍歷@list中的其餘值。有任何想法嗎?Perl之後的Perl循環問題?

for($i = 0; $i <@list; i++){ 
    if($value{attrs[$i]} ne $otherValue{otherAttrs[$i]}){ 
     $convert = valueConvert(otherValue{otherAttrs[$i]}; 
     $value{attrs[$i]} = $convert; 
    } 
} 

這是次

sub valueConvert{ 
    ($mValue) = @_; 
    .... 
    return $mValue 
} 

的值正確地轉換在子並返回到主循環,並正確分配。所以我不知道什麼是錯的

+6

在EVERY中包含['use strict;'](http://perldoc.perl.org/strict.html)和['use warnings'](http://perldoc.perl.org/warnings.html) perl腳本。這很可能是你問題的根源,但是你不能提供足夠的信息來確定診斷。 – Miller 2014-10-30 16:58:07

+1

您還應該添加一些打印語句來調試問題。打印@list的大小,然後每次循環嘗試打印'$ i'。這將告訴你,如果它正在通過每一次迭代。我的猜測是它經歷了每一次迭代,但是你的'if()'語句每次都沒有返回「true」,所以它似乎在跳過一些東西。 – tjwrona1992 2014-10-30 17:02:42

回答

3

你不顯示你的實際代碼,因爲你所做的顯示有錯誤而且不會運行。

推測valueConvert(或它調用的東西)正在改變你的$ i或@list;我懷疑你正在使用全局變量而不是詞法範圍變量。如果問題是$ i,而不是@list,則可以簡單地執行:

for (my $i = 0; $i <@list; $i++){ 

要修復它。

+0

就是這樣。謝謝 – eein 2014-10-30 17:06:39

+6

現在去添加'use strict;使用警告;'並使*你的所有*變量詞法:) – ysth 2014-10-30 17:11:18