如何在Perl

时间:2016-02-08 14:27:58

标签: perl loops foreach

对于下面的代码,我试图在foreach语句中包含另一个循环。 我有两个清单。 第一个"项目"是我的列表,我检查元素是否为零。 第二个列表" varis"是我的列表,其中为值不为零的情况保存了值。

我想检查列表中的值是否" item"为零,如果是,则将元素设置为零。 如果没有将第一个元素的值设置为我的列表varis中列出的第一个值。 第二个元素也是如此。如果第二个元素不为零,则将该值设置为varis中列出的第二个值,依此类推。 到目前为止,我使用foreach语句来检查我的" item"名单。 但是,我不确定如何进入我的第二个清单。 我正在考虑将第二个循环集成到我的foreach语句中。 但我不知道如何。

$sums = (2+4+5+6+5+10+4); 
my @item=(0,50,5,3,5,15,0);
$sum = 0;
my @varis = (2,4,5,6,5,10,4);

foreach my $item(@item){
        if ( $item==0) {$item=0}    # if element in item is zero set element as zero
           else {$item=$varis;}     # else for element in @item set the value as the first element in @varis, for the second element (if it's not zero) in @item add the second element and so on     
       $sum = $sum + $item;         # sum all the values
    }

    $result = $sums/$sum;
    print "$result\n";

1 个答案:

答案 0 :(得分:6)

您希望$varis[$i]其中$i是正在处理的@items元素的索引,但您没有$i。因此,您需要迭代@items的索引,而不是迭代其元素。

解决方案:

my $sum = 0;
for my $i (0..$#items) { 
   my $item;
   if ($items[$i] == 0) {
      $item = 0;
   } else {
      $item = $varis[$i];
   }

   $sum = $sum + $item;
}

简化解决方案:

my $sum = 0;
for my $i (0..$#items) {
    $sum += $varis[$i] if $items[$i];
}