我是perl的新手,我试图根据一些用户输入创建一个哈希。我希望散列的键在特定范围之间,每个键的增量。此时我需要每个键的值为0。
那时,我的代码是:
my %hash;
foreach (my $increm = $lowerbound; $increm <= $upperbound; ++$binsize) {
push ($hash {$increm}, 0);
}
示例值可以是:
$lowerbound = 500
$upperbound = 600
$binsize = 1
我收到错误#34;不是ARRAY参考&#34;,问题是什么,我哪里出错?
提前谢谢!
答案 0 :(得分:3)
首先,
++$binsize
应该是
$increm += $binsize;
push
有两种语法:
push @array, LIST
push $array_ref, LIST
你正在使用第二个,它需要一个数组的引用,但你传递的是undef。修正:
push $hash{$increm} ||= [], 0;
会做到这一点。也就是说,该语法是“高度实验性的”,并不适用于所有对数组的引用。我建议你坚持传统的语法。
push @{ $hash{$increm} ||= [] }, 0;
但是由于自动更新,这简化为
push @{ $hash{$increm} }, 0;
但你为什么要使用push
呢?您只需为每个键分配一个值,因此push
等同于以下内容:
$hash{$increm} = [ 0 ];
实际上,您是否希望$hash{$increm}
成为数组引用是值得怀疑的。你只想要以下内容吗?
$hash{$increm} = 0;
答案 1 :(得分:0)
你推进阵列。只需使用像这样的简单作业
$hash{$increment} = 0 ;
另外,不要在$ hash的末尾和花括号之间留一个空格。
答案 2 :(得分:0)
您可以这样做:
perl -MData::Dumper -e 'for (1..5) { $a->{$_} = 0 }; print Dumper $a'
$VAR1 = {
'4' => 0,
'1' => 0,
'3' => 0,
'2' => 0,
'5' => 0
};
答案 3 :(得分:0)
Push是数组,你可以这样做:
my %hash;
my $lowerbound = 500;
my $upperbound = 600;
my $binsize = 1;
foreach (my $increm = $lowerbound; $increm <= $upperbound; $binsize++) {
$hash{$increm} = 0;
}