• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ハッシュのリファレンスを用いた処理)

Perlのスクリプトで複数のブロックからなる情報をハッシュのリファレンスの配列にまとめる方法について

このQ&Aのポイント
  • ActivePerl 5.8, WinXP SP2の環境でPerlスクリプトを使用して、複数のブロックからなる情報をハッシュのリファレンスの配列にまとめたいと考えています。
  • ファイルから1つのブロックを読み取り、その内容をハッシュに追加します。ブロックごとにハッシュのリファレンスを作成し、配列に格納します。
  • 現在のスクリプトでは、3つのブロックすべてが同じハッシュを参照しているため、ハッシュが上書きされてしまう問題が発生しています。この問題を解決するためには、各ブロックごとに新しいハッシュを作成し、それを配列に格納する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

> my %hash; > ... > while (<IN>) { > ... > $reff = \%hash; > push(@array_of_reff, $reff); > ... 原因は、while の外側で %hash が定義されているため、すべて同じリファレンスが push されるためです。これを回避するには、一時的なハッシュにコピーしてから push する、 無名ハッシュを使う、などの方法があります。 my %temp = %hash; push @array_of_ref, \%temp; または、 push @array_of_ref, { %hash };

hydrozoa
質問者

お礼

書いていただいた部分を直したところ、うまく動きました。 これまで独学やトライアンドエラーでやっていたため、変数やハッシュの定義の理解がちゃんとできていなかったようです。今回の件は非常に勉強になりました。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A