在Perl中向数组添加元素
问题描述:
我有这个代码,我想将10,11和12添加到数组arr中。在Perl中向数组添加元素
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]
为什么仅被定义阵列的最后一个元素?
答
由于您已经在循环内声明了数组,因此每次都会重新创建它,删除以前迭代循环中的任何值。
循环之前,您应该declaure @arr
,如果您想要的值保持:
my @arr;
for my $d (@num) {
...
}
而且因为这行:
$arr[$d];
$d
是由其他数组定义的位置(0 ,然后是1,然后是2)。因此它将$i
的值放在该阵列中的该位置,并将之前的值放入undef
。
答
AntonH的answer解决了您的特定代码的具体问题,但实际上有重写代码的方法可以完全避免此问题。更“Perl化”的方式来完成同样的事情将是:
my @arr;
for my $i (0 .. 2) {
push(@arr, $i + 10);
}
或者:
my @arr = map { $_ + 10 } 0 .. 2;
或者只是:
my @arr = 10 .. 12;
这是一件好事,保持'使用严格和使用warnings' – Shantesh