Perl再入門 | アルパカ本に学ぶリファレンス入門 1 配列のリファレンス


リファレンスというのは、ある変数(データ)へのリンクあるいはショートカットのようなものです。


リンクとコンテンツの関係
例えば、今あなたのお気に入り(ブックマーク)にYahoo!Japanが登録されていたとします。
このとき、実際にお気に入りフォルダに入っているものは、Yahoo!JapanのURL(リンク情報)だけであり、Yahoo!JapanのWebサイトのHTMLコンテンツそのものは格納されていません。
つまり、"http://www.yahoo.co.jp/" というURLは、Yahoo!Japanのサイトのトップページを指しますが、トップページのHTMLコンテンツそのものではありません。あくまでHTMLファイルが置かれている場所を示すアドレスにすぎないのです。
実例
さて、
@list = ("a", "b", "c");
という配列があるとします。 
この配列には3つのデータが格納されています。 ここで、\@listのように配列名の前に\を付けると(Windowsの場合は¥記号)、それは配列@listへのリファレンスを表します。
リファレンスはあくまで配列を指し示すものであって、配列そのものではありません。 リファレンスは、$変数に代入することができます。
$reference_to_list = \@list;  # @listのアドレス(住所)を代入
$reference_to_list_2 = $reference_to_list;  #  これも、@listを指し示す。
$reference3_to_list3 = \@list;   #  これも@listを指し示す
この3つの$変数はどれも同じひとつの物(配列@list)を指しています。 なので、@listをの中身を書き換えると、これら3つの$変数が指し示すものも変わります。 これは例えば、
http://www.yahoo.co.jp
http://www.yahoo.co.jp/
http://www.yahoo.co.jp/index.html
の3つのURLが指すものはどれも同じコンテンツ(ヤフーのトップページのhtmlファイル)であるのと似ています。 ヤフーがトップページのコンテンツ(=index.htmlファイル)を書き換えると、これら3つのURLが返す結果が変わります。 リファレンス($reference_to_list)とデータ(@list)の関係もこれと同じことです。 ちなみにリファレンスをprint出力すると下記のような結果になります。
print $reference_to_list;
出力:  ARRAY(0x1829884)
この" ARRAY(0x1829884)" が、@listを指し示すアドレスです。 @listはコンピュータのメモリ上に存在し、そのメモリ上のアドレスが" ARRAY(0x1829884)"なのです。 ちなみに、$reference_to_list2, $reference_to_list3をprint出力した場合も全く同じ結果が出ます。
カテゴリ: