在Perl中为哈希创建增量值

时间:2013-10-31 13:24:48

标签: perl hash

我是perl的新手,我试图根据一些用户输入创建一个哈希。我希望散列的键在特定范围之间,每个键的增量。此时我需要每个键的值为0。

那时,我的代码是:

my %hash;
foreach (my $increm = $lowerbound; $increm <= $upperbound; ++$binsize) {

        push ($hash {$increm}, 0);

}

示例值可以是:

$lowerbound = 500
$upperbound = 600
$binsize = 1

我收到错误#34;不是ARRAY参考&#34;,问题是什么,我哪里出错?

提前谢谢!

4 个答案:

答案 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;
}