次のように宣言された perl ハッシュに配列があります。
my %updatevars = (datapoints => []);
後で次のように要素を追加しようとしています:
push($updatevars{'datapoints'}, [$updatestart+$i, $bandwidth]);
次のエラーが表示されます。
プッシュする arg 1 の型は、dirlist.pl の 61 行目の "])" の近くの配列 (ハッシュ要素ではない) でなければなりません
ハッシュ (および配列) には、スカラーのみを含めることができます。そのため、配列 (およびハッシュ) への参照を配置する必要があります。$updatevars{datapoints}配列への参照が含まれています。そのため、使用する必要があります
push @{ $updatevars{datapoints} }, [ $updatestart+$i, $bandwidth ];
push参照も受け入れるように変更されたため、コードは 5.14 以降で動作することに注意してください。(ただし、この変更は「非常に実験的なものと見なされる」ため、新しいバージョンでも上記のコードを使用する必要があります。)
$updatevars{'datapoints'}は、割り当てた配列参照です: []. push配列参照ではなく、配列を引数として取ります。したがって、参照を逆参照する必要があります。
push @{ $updatevars{'datapoints'} }, ...
Perl v5.14 では、ドキュメントに記載されているように、参照を使用できます。しかし、まだ推奨されているようには思えません。
Perl 5.14 から、"push" は、unblessed 配列への参照を保持しなければならないスカラー EXPR を取ることができます。引数は自動的に逆参照されます。「プッシュ」のこの側面は非常に実験的であると考えられています。正確な動作は、Perl の将来のバージョンで変更される可能性があります。
これを試して:
push @{$updatevars{'datapoints'}}, [$updatestart+$i, $bandwidth];
push配列を取り、配列参照であるため、を前$updatevars{'datapoints'}に置いて逆参照する必要があります。@{}