1

私は perl を初めて使用し、ユーザー入力に基づいてハッシュを作成しようとしています。ハッシュのキーが、各キーの増分で特定の範囲内にあることを望みます。この時点で、各キーの値を 0 にする必要があります。

現時点で、私のコードは次のとおりです。

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

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

}

値の例は次のとおりです。

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

「ARRAY 参照ではありません」というエラーが表示されます。何が問題で、どこが間違っているのでしょうか?

前もって感謝します!

4

4 に答える 4

3

初めに、

++$binsize

する必要があります

$increm += $binsize;

push次の 2 つの構文があります。

 push @array, LIST
 push $array_ref, LIST

配列への参照を期待する 2 番目を使用していますが、代わりに undef を渡しています。修理:

push $hash{$increm} ||= [], 0;

トリックを行うでしょう。つまり、その構文は「非常に実験的」であり、配列へのすべての参照では機能しません。従来の構文に固執することをお勧めします。

push @{ $hash{$increm} ||= [] }, 0;

しかし、自動活性化のおかげで、それは次のように簡素化されます

push @{ $hash{$increm} }, 0;

しかし、なぜあなたpushはまったく使っているのですか?キーごとに 1 つの値のみを割り当てるため、pushは次と同等です。

$hash{$increm} = [ 0 ];

$hash{$increm}実際、配列参照になりたいかどうかは疑問です。あなたは単に次のことを望んでいますか?

$hash{$increm} = 0;
于 2013-10-31T13:34:44.147 に答える
0

配列にプッシュします。このような単純な割り当てを使用するだけです

$hash{$increment} = 0 ;

また、$hash の末尾と中括弧の間にスペースを入れないでください。

于 2013-10-31T13:32:57.277 に答える
0

あなたはそうするかもしれません:

perl -MData::Dumper -e 'for (1..5) { $a->{$_} = 0 }; print Dumper $a'

$VAR1 = {
          '4' => 0,
          '1' => 0,
          '3' => 0,
          '2' => 0,
          '5' => 0
        };
于 2013-10-31T13:34:03.083 に答える
0

プッシュは配列用です。次のようにできます:

my %hash;

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

foreach (my $increm = $lowerbound; $increm <= $upperbound; $binsize++) {
    $hash{$increm} = 0;
}
于 2013-10-31T13:36:43.547 に答える