- ベストアンサー
Perlのリファレンスとは?
- Perlのリファレンスとは、機械語のメモリアドレス(番地)を表すものです。
- 配列のリファレンスを使用すると、配列のメモリ領域が確保されます。
- スカラー変数には1つのデータが入るため、5個のデータは入りません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
カテゴリーにも書いてありますが「Perl」です。 もし「Parl」という私の知らない言語なら、以下の話は無視してください。 少しだけ正しい、といったところでしょうか。 リファレンスは、機械語で例えれば、番地のようなものです。 ただ、もっと抽象的なものです。リファレンスを辿ると、参照先へアクセスできるような、なんらかの情報、くらいのものです。 実際に何が記録されているかは、ソースを読めば解るでしょうが、Perlの処理系自体を開発するのでなければ、考えなくてもいいものです。 あと、 > 配列@arrayの番地は、5個ぶんのメモリ領域が確保されるのでしょうか? > そしてスカラー$ref_arrayに代入される番地は、 > その5個ぶんの番地の先頭番地でしょうか? > (スカラー変数1つに、5個のデータは入らないですよね?) とか書いているのを見ると、機械語やC言語のような考えがあるようですが、Perlではもっと抽象的に考えてください。 順番にならんだ直線ではなく、大小関係のない面や立体的な空間の中に変数領域があるような。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
まず「リファレンス」というのは「何かを参照するための情報」でしかありませんから, それが「アドレスである」とは限りません. でも, 「画面上16進数の番地等は表に出てこないようですが・・」というのは, どう試したんだろう. もう 1点. @array = (1, 2, 3, 4, 5); とした場合に, 「配列@arrayの番地は、5個ぶんのメモリ領域が確保される」とは限りません. あとで push や unshift のような操作をすることもあるので, 一般的にはもっと多めに確保しているはずです.
お礼
ご指南ありがとうございます。 下記のように、デリファレンス演算子$を重ねずに リファレンスをprint関数処理すると、 6桁の16進数が画面表示されますが、 これがメモリアドレスかと思いましたが、 そうとは限らないのですね。 $word = "A"; $ref_word = \$word; print $ref_word, "\n"; (実行結果) SCALAR(0xa29e0c)
お礼
失礼しました、「PERL」でした、単なるスペルミスです。 「reference=抽象参照」とでも訳すべきでしょうか、 考えなくてもよい要素を勝手に自己解釈していました。 抽象的にとどめているぶん、逆に難しい概念ですね。 なんとなくわかりましたが、まだまだ勉強していきます。 ありがとうございました。