2014-05-15 152 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 // ''; 
}