在Perl中向数组添加元素

时间:2016-01-20 04:12:34

标签: arrays perl

我有这个代码,我想将10,11和12添加到数组arr。

my @num=(0,1,2);
my $i=10;
for my $d (@num){
   if (defined($d)) {
      my @arr;
      $arr[$d] = $i;
      $i=$i+1;
      my $dvv=dump(\@arr);
      print "**** $dvv \n";
   }
}

输出结果为:

**** [10]
**** [undef, 11]
**** [undef, undef, 12]

为什么只定义了数组的最后一个元素?

2 个答案:

答案 0 :(得分:10)

AntonH' answer解决了您的特定代码的具体问题,但实际上有一些方法可以重写您的代码,从而完全避免问题。更多" Perlish"完成同样事情的方法是:

my @arr = map { $_ + 10 } 0 .. 2;

或者:

my @arr = 10 .. 12;

或者只是:

question.QuestionCategory = null;
question.QuestionCategoryId = SelectedQuestionCategory.Id;

答案 1 :(得分:6)

由于你在循环中有数组的声明,它每次都会重新创建它,删除在循环的前一次迭代中放在其中的任何值。

如果您希望保留值,则应在循环前声明@arr

my @arr;
for my $d (@num) {
    ...
}

因为这一行:

$arr[$d];

$d是由另一个数组定义的位置(0,然后是1,然后是2)。因此,它将$i的值放在数组中的该位置,并将值放在undef之前。