• ベストアンサー

リファレンスを用いた記述について

仮に、リファレンス値を「$hoge」とします。 通常、このリファレンスの値を参照する場合、 $$hoge とすれば取得できるかと思います。 とある参考書をみていたところ、 @{$hoge} にてリファレンス値を取得との記述がありました。 (例文:push @work,@{$hoge}) どうして、@をつけてリファレンスの指す値を取得するのか 理解できません。 リファレンスについて混乱しつつあるので、回答よろしくお願い致します。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「何のリファレンスなのか」で付ける記号は変わります。 例えば $hoge = \$foo; なら $$hoge で $foo の値が求まりますし、 $hoge = \@foo; なら @$hoge で @foo の値が得られます。 ハッシュやサブルーチンのリファレンスについても同様。

yokt
質問者

お礼

回答ありがとうございました。 分かりやすい説明で、納得できました。

その他の回答 (1)

  • zah90921
  • ベストアンサー率0% (0/2)
回答No.2

#1さんの回答に補足です。 @{$hoge}はスカラ値をとりだしているのではなく、配列を丸ごと取り出しています。配列中の個々のスカラ値を参照するには、例えば、$hoge->[0] とか、${$hoge}[0] とかで参照します。 リファレンスはC言語などのポインタと同様の概念ですので、(スカラ値である)リファレンス値は参照したいデータの先頭アドレスを示すと考えると良いでしょう。 $hogeによって参照されるデータが配列ならば@{$hoge}でその配列全体を参照しているということです。 対象がハッシュならば%{$hoge}でハッシュ全体を参照できます。

参考URL:
http://www98.sakura.ne.jp/~jun/perl/ref.html
yokt
質問者

お礼

回答ありがとうございました。 ちょっとした記述でも、奥が深いですね。 とても参考になりました。

関連するQ&A