我有一个sub,尽管有一个return语句,但它没有返回任何内容:
$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 '';
}
调试窗口不显示var $ match:
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>
答案 0 :(得分:3)
我猜这个问题是你在返回$i
之前因某种原因将$$findIN[$i]
设置为100000。 @$findIN
很可能没有100001个元素,因此$$findIN[$i]
将尝试获取不存在的元素,从而导致函数返回undef
。
答案 1 :(得分:2)
您对index
的使用是倒退的。第一个参数是要在其中搜索的字符串,第二个参数是您要查找的内容。
假设您的匹配有效,通过为$i
分配一个不可能的高值,将导致return $$findIN[$i]
返回未定义(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 // '';
}