2011-12-15 17 views
-2

perl内のハッシュ/配列に奇妙な問題がありますが、データを読み込んでいますが、データを読み出すと、すべてのレコード。私が使用していたデータが敏感であるようPerl:ハッシュが正しく情報を格納していない

私は以下のシステムをデモしてみましょう、これは私のコードの正確なコピーではありません。

$データの値[6]は、エラーを確認した変えることができ

my @store = array(); 
my @data = array(columns1....1000); 

# Overall loop 
for(my $counter = 0; $i <= $2; $counter++) 
{ 
    # loop dataset 
    for(my $record = 0; $record <= $100; $record++) 
    { 


     $store[$counter][$record]->{$data[6]} = $data[100]; 


    } 
} 
+4

'$ 2'、' $ 100' ??また、あなたはどこからでも '$ i'を使用しています。 – codaddict

+5

作業コードに問題を示すサンプルデータを入力してください。 –

+0

ここにコードを投稿できない場合は、Data :: Dumperを使用して中間段階でハッシュ値を出力してデバッグしてみてください。http://search.cpan.org/~ilyam/Data-Dumper-2.121/Dumper.pm –

答えて

2

codaddictコメントで指摘したように、あなたはあなたのループのインデックスに誤りがある - $2を変数(おそらく未定義)ではなく、整数2

はしかし、それは一般のPerlへのコードのにおいです明示的な配列インデックスを使用します。代わりに、より自然な方法でデータ構造を構築する必要があります:

my @store = map { 
    [ 
     map { 
      # some logic here which fills in the second dimension of data   
     } (1..100); 
    ] 
} (1..2); 
+2

私はネストされた 'map'のことは私にとって自然ではないと言わなければなりません。これはもちろん私の問題かもしれません... – flies

+2

@flies:おそらく味の問題です。私はネストされた 'map'sは' for'ループより読みやすく、これほどシンプルなことをしていると思います。 – flesk

+1

'for'ループのほうが好きなら、for(my $ record = 0; $ record <= 100; $ record ++)の代わりに' foreach my $ record(0 .. 100) 'を実行してみてください。 – stevenl

0

値ではなく$data[$record]のようなものが保存されているように聞こえます。スカラーへのあなたのデータストアの参照の場合

その後、$$data[$record]は同様@{data[$record]}%{data[$record]}配列やハッシュのために、それをdereferenceます。

+4

私は通常、 '$$ data [$ record]'を使って '$ data - > [$ record]'を使うことを好みます。 – zostay

関連する問題