2

ハッシュのハッシュに保存する値を収集しようとしていますが、perl がそれを行う方法についてちょっと混乱しています。したがって、次のようにハッシュのハッシュを作成します。

 my %hash;
 my @items;

 #... some code missing here, generally I'm just populating the @items list 
 #with $currentitem items

 while (<FILE>) { #read the file

         ($a, $b) = split(/\s+/,$_,-1);
         $hash{$currentitem} => {$a => $b};
         print $hash{$currentitem}{$a} . "\n";#this is a test and it works
}

上記のコードは機能しているようです。要点を言えば、$currentitem の値を保持する配列 @items があります。そして、私はこのようなことをしたい:

@test = keys %hash{ $items[$num] };

特定のアイテムのすべてのキーと値のペアを取得できるようにします。上記のコード行と同様に試しました

 while ( ($key, $value) = each( $hash{$items[$num]} ) ) {

      print "$key, $value\n";
 }

次のようにハッシュを入力しようとしました:

$host{ "$currentcustomer" }{"$a"} => "$b";

私が出会ったさまざまなオンライン情報源によると、どちらがより正しいようです。それでも、そのハッシュ内のデータにアクセスできません...何かアイデアはありますか?

4

2 に答える 2

2

これが機能すると言って混乱しています:

$hash{$currentitem} => {$a => $b};

それはうまくいかないはずです(そして私にとってはうまくいきません)。演算子は特別な種類の=>コンマであり、代入ではありません ( perlopを参照)。さらに、右側の構造は新しい匿名ハッシュを作成します。それを使用すると、追加しようとした要素ごとに新しい匿名ハッシュが古いものを上書きします。各 に対して 1 つの要素しかありません$currentitem

割り当てに必要なものは次のとおりです。

$hash{$currentitem}{$a} = $b;

そして、キーを取得する方法は次のとおりです。

keys %{ $hash{ $items[$num] } };

これをより適切に処理するには、Perl のリファレンスを読むことをお勧めします。構文は、最初は少し難しいかもしれません。

于 2012-09-27T10:56:09.410 に答える
1

長い答えはperldoc perldscにあります。

簡単な答えは次のとおりです。

keys %{ $expr_producing_hash_ref };

あなたの場合、私はそれが

keys %{ $hash{$items[$num]} }; 
于 2012-09-27T10:49:07.530 に答える