2014-05-15 21 views
0

我有一子,而且它不是儘管return語句返回任何東西:被Perl沒有返回值子程序

$match = findInArray($$firstArray[$i], $secondArray); 

sub findInArray() { 
    my $findThis = $_[0]; 
    my $findIN = $_[1]; 
    for (my $i = 0;$i <= $#$findIN;$i++) { 
     if (index($findThis, $$findIN[$i]) != -1) { 
      $i = 100000; 
      return $$findIN[$i]; 
     } 
    } 
    return ''; 
} 

調試窗口顯示沒有爲變量$比賽:

DB<86> 
    main::findInArray(ConfCompare:60):       return $$findIN[$i]; 
    DB<86> p $$findIN[Si] 
    platform/ss7statistics;enableDetailedLinkData;true 
    DB<87> n 
    main::findDifferencesSclarArrays(ConfCompare:40): 
    40:      if ($match eq ''){ 
    DB<87> p $match 

    DB<88> 

回答

3

我猜這個問題是由於某種原因,在返回$$findIN[$i]之前將$i設置爲100000。很可能@$findIN沒有100001個元素,因此$$findIN[$i]將嘗試獲取不存在的元素,導致函數返回undef

+0

知道了。邏輯錯誤 – Muz

2

您使用index是倒退。第一個參數是要在其中搜索的字符串,第二個參數是您要查找的內容。

假設您的匹配有效,通過爲$i分配一個不可能的高值將導致return $$findIN[$i]返回undefined(undef)。

您可能還需要考慮重寫你的函數是多一點明確:

sub findInArray { 
    my ($findThis, $array) = @_; 
    foreach my $element (@$array) { 
     return $element if index($element, $findThis) != -1; 
    } 
    return ''; 
} 

這將保持正是您當前的子程序在做什麼。如果你不介意瀏覽整個陣列,你也可以這樣做:

sub findInArray { 
    my ($findThis, $array) = @_; 
    my ($match) = grep { index($element, $findThis) != -1 } @$array; 
    return $match // ''; 
}