0

次のように宣言された perl ハッシュに配列があります。

my %updatevars = (datapoints => []);

後で次のように要素を追加しようとしています:

push($updatevars{'datapoints'}, [$updatestart+$i, $bandwidth]);

次のエラーが表示されます。

プッシュする arg 1 の型は、dirlist.pl の 61 行目の "])" の近くの配列 (ハッシュ要素ではない) でなければなりません

4

3 に答える 3

6

ハッシュ (および配列) には、スカラーのみを含めることができます。そのため、配列 (およびハッシュ) への参照を配置する必要があります。$updatevars{datapoints}配列への参照が含まれています。そのため、使用する必要があります

push @{ $updatevars{datapoints} }, [ $updatestart+$i, $bandwidth ];

push参照も受け入れるように変更されたため、コードは 5.14 以降で動作することに注意してください。(ただし、この変更は「非常に実験的なものと見なされる」ため、新しいバージョンでも上記のコードを使用する必要があります。)

于 2013-10-10T20:40:49.003 に答える
3

$updatevars{'datapoints'}は、割り当てた配列参照です: []. push配列参照ではなく、配列を引数として取ります。したがって、参照を逆参照する必要があります。

push @{ $updatevars{'datapoints'} }, ...

Perl v5.14 では、ドキュメントに記載されているように、参照を使用できます。しかし、まだ推奨されているようには思えません。

Perl 5.14 から、"push" は、unblessed 配列への参照を保持しなければならないスカラー EXPR を取ることができます。引数は自動的に逆参照されます。「プッシュ」のこの側面は非常に実験的であると考えられています。正確な動作は、Perl の将来のバージョンで変更される可能性があります。

于 2013-10-10T20:40:40.167 に答える
2

これを試して:

push @{$updatevars{'datapoints'}}, [$updatestart+$i, $bandwidth];

push配列を取り、配列参照であるため、を前$updatevars{'datapoints'}に置いて逆参照する必要があります。@{}

于 2013-10-10T20:39:49.837 に答える