我有这个代码,我想将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]
为什么只定义了数组的最后一个元素?
答案 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
之前。