$text_file = '/homedir/report';
open ( $DATA,$text_file ) || die "Error!"; #open the file
@ICC2_array = <$DATA>;
$total_line = scalar@ICC2_array; # total number of lines
@address_array = split('\n',$address[6608]); # The first content is what I want and it is correct, I have checked using print
LABEL2:
for ( $count=0; $count < $total_line; $count++ ) {
if ( grep { $_ eq "$address_array[0]" } $ICC2_array[$count] ) {
print "This address is found!\n";
last LABEL2;
}
elsif ( $count == $total_line - 1 ) { # if not found in all lines
print "No matching is found for this address\n";
last LABEL2;
}
}
我试图逐行匹配@ICC2_array
中的第6609个地址。我确定此地址位于$text_file
,但格式完全相同。
这样的事情:
$address[6608]
包含
Startpoint: port/start/input_output (triggered by clock3)
Endpoint: port/end/input_output (rising edge-triggered)
$address_array[0]
包含
Startpoint: port/start/input_output (triggered by clock3)
$text_file
中的一行是
Startpoint: port/start/input_output (triggered by clock3)
然而输出是"no matching found for this address"
,有人可以指出我的错误吗?
答案 0 :(得分:1)
@ICC2_array
中的所有元素最后都会包含换行符。
由于$address_array[0]
是通过在\n
上拆分数据创建的,因此保证不会包含换行符。
以换行符结尾的字符串永远不能等于不包含换行符的字符串。
我建议更换:
@ICC2_array = <$DATA>;
使用:
chomp(@ICC2_array = <$DATA>);
更新:我刚刚发现的另一个问题。您在每次迭代时递增$count
两次。您可以在循环控制代码($count++
)中递增它,并且还在else
子句($count += 1
)中递增它。因此,您可能只检查@ICC2_array
中的所有其他元素。
答案 1 :(得分:1)
我认为你的代码应该是这样的
来自核心模块any
的{{1}}运算符与List::Util
类似,只是它会在找到匹配后立即停止搜索,因此平均应该快两倍。 grep
的早期迭代不包含List::Util
,如果适用于您,您只需使用any
我已从您的数组标识符中删除了grep
,因为_array
表示它是一个数组而且只是不需要的噪音
@