【发布时间】:2017-07-24 20:08:31
【问题描述】:
我有一个带有 if 语句的 for 循环,如下所示:
for (my $i=0; $i < $size; $i++) {
if ($array[$i] =~ m/_(B|P|BC|PM)/) {
#Remove from @array
splice(@array, $i, 1);
next;
}
#Get rid of numbers at the end
$array[$i] =~ s/_[0-9]+//;
}
我收到一条错误消息,在 if 语句的行上显示“在模式匹配中使用 @array 中的未初始化值......”。
当我从该行的正则表达式中删除交替时,错误就消失了。如果我注释掉整个 if 语句,则注释“#Get rid of numbers at the end”下的正则表达式不会产生任何错误。
我已经打印出@array 的所有值,一切看起来都很好。我试过没有括号和括号,而不是表达式中的括号,没有任何变化。有什么想法可能导致这种情况吗?
【问题讨论】:
-
“删除交替”是指我将正则表达式更改为“$array[$I] =~ m/_B/”
-
哦,是的,我每次都需要减少 $size,谢谢
-
仅仅减少 $size 是不够的;删除元素后,您仍将跳过处理该元素
-
你还需要递减
$i。 -
@mob 或重做而不是下一个
标签: regex perl alternation regex-alternation