2011-12-22 3 views
6

私は厳しいと警告持っているが、それは次の行の初期化不満保つ:Perl:空の配列参照を新しいハッシュで宣言するにはどうすればよいですか?

$hash{$key} = ($row, [], [], [], ''); 

それはその一行のために警告している:私はデータを充填しています

"Useless use of private variable in void context" 

"Useless use of anonymous list ([]) in void context" (3 times) 

後で、インデックス1,2,3を配列参照にし、インデックス4を文字列にします。

$hash{$key}->[1]->[3] = 'Data'; 
$hash{$key}->[4] = $hash{$key}->[4] . 'More Data'; 

もちろん、私は何か間違ったことをやっているが、私はそれが正しいようにする方法を正確にわからない:私はそうのようなデータにアクセスし、充填しています。 (また、最後の行が冗長であることも知っていますが、より良い方法で集計することもできますか?)

答えて

12

ハッシュの要素はスカラーだけにすることができるので、匿名代わりに、括弧の配列コンストラクタ:

$hash{$key} = [$row, [], [], [], '']; 

詳細については、perldscを参照してください。

ライン:

$hash{$key}->[4] .= 'More Data'; 

をそして最後に、あなたのそれらのような場合を除き、->文字が添え​​字の区切り文字間の暗黙的なので、$hash{$key}->[1]->[3]$hash{$key}[1][3]と同じことを意味します

$hash{$key}->[4] = $hash{$key}->[4] . 'More Data'; 

を書くことができます

3

私はあなたが何をしようとしているのかよく分かりませんが、配列をスカラー値に割り当てる場合は、あなたは無名配列を作成するために括弧を使用する必要があります:あなたのケースでは

$hash{$key} = [$row, [], [], [], '']; 

を次のように、あなたが何しようとしていることに解釈されます。

$row, [], [], []; 
$hash{$key} = ''; 

あなたが値のリストを割り当てることができないためスカラー(単一値変数)。しかし、上記のように、の参照には、を含む匿名配列にスカラー値のリストを割り当てることができます。

2

あなたはほとんどそれを持っています。

ハッシュと配列の値はすべてスカラーでなければならないことに注意してください。したがって、配列のハッシュが必要な場合は、配列参照をハッシュキーに割り当てる必要があります。したがって:

$hash{$key} = [ $row, [], [], [], '' ]; 

はあなたが望むものです。

関連する問題