我的程序在target_services数组中有2个变量
DB<1> x @target_services
0 3400000000000012
1 3400000000000011
这是它命中的代码
foreach my $i (@target_services){
my $vl = shift @values || "";
my $dp = shift @descriptions || "";
my $ts_id = shift @target_services;
my $lp = shift @lp_values;
if (get_lp($ts_id,$lp) eq 'YES'){
print "ts id $ts_id already has $lp LP. Aborting addition of this LP for this TS\n";
next;
}
my $temp_query = $sql3;
$temp_query =~ s/TS/$ts_id/;
$temp_query =~ s/LP/$lp/;
$temp_query =~ s/VL/$vl/;
$temp_query =~ s/DP/$dp/;
my $sth3 = get_sth($temp_query);
$count_lps+=$sth3->get_count();
$count_ts++;
}
调试器意味着它经历了一次循环,到达下一个循环;然后跳到我的打印声明。并且永远不会再次进入循环。
请解释原因
答案 0 :(得分:8)
记录在perlsyn:
中如果LIST的任何部分是数组,如果在循环体内添加或删除元素,
foreach
将会非常混乱,例如使用splice
。所以不要这样做。
这正是你所做的:
foreach my $i (@target_services){
# ...
my $ts_id = shift @target_services;
改为使用
foreach my $ts_id (@target_services){
# ...