1

%AllData次のコードを使用して、データベースからデータを取得するハッシュがあります。

while(my $Row = $sth1->fetchrow_hashref())
        {
            if(defined($Row->{LotID}))
            {
                    $AllData->{$Row->{LotID}}->{$Row->{Name}} = $Row->{Details};
            }
        }

データのプルが完了したら、次print Dumper($AllData);のように表示されるすべてのデータを印刷します。

$VAR1 = {
          '4197359' => {
                         'Short Description' => 'Rock Picker',
                         'Lot Number' => '1065',
                         'Description' => 'Rock Picker'
                       },
          '4194148' => {
                         'Short Description' => 'Large work bench w/ drawers',
                         'Lot Number' => '1041',
                         'Description' => 'Large work bench w/ drawers'
                       },
          '4200944' => {
                         'Lot Number' => '1084',
                         'Description' => 'Horse Trailer'
                       }
}

ただし、ハッシュのサイズを出力したり、foreachハッシュにアクセスしようとすると、サイズが 0 と表示され、ハッシュ内のどの要素にもアクセスできません。

print "Hash Size: ", scalar keys %AllData, "\n";

ショー:

Hash Size: 0

問題の原因は何ですか?

4

4 に答える 4

6

hash はありませ%AllDataん。プログラムでエラーが発生しなかった場合は、

use strict;
use warnings;

あなたのプログラムの頭に。これは、すべての Perl プログラムにとって重要です。特に、自分のコードについて他の人に助けを求める場合には重要です。

関心のあるハッシュは によって参照されるもの$AllDataなので、この変数を使用して逆参照する必要があります。このような

print "Hash Size: ", scalar keys %$AllData, "\n";
于 2013-04-23T18:39:27.887 に答える
2

最初にハッシュを逆参照する必要があるかもしれません:

print "Hash Size: ", scalar keys %{ $AllData }, "\n";
于 2013-04-23T18:34:50.607 に答える
0

$%hash出力するのではなく、ハッシュ参照を表す必要があり%hashます

于 2013-07-01T07:44:43.460 に答える