perl早退出循环

时间:2017-02-23 12:42:02

标签: perl loops

我的程序在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++;
    }

调试器意味着它经历了一次循环,到达下一个循环;然后跳到我的打印声明。并且永远不会再次进入循环。

请解释原因

1 个答案:

答案 0 :(得分:8)

记录在perlsyn

  

如果LIST的任何部分是数组,如果在循环体内添加或删除元素,foreach将会非常混乱,例如使用splice。所以不要这样做。

这正是你所做的:

foreach my $i (@target_services){
    # ...
    my $ts_id  = shift @target_services;

改为使用

foreach my $ts_id (@target_services){
    # ...