リファレンス(参照)


変数のアドレスを得る

コンピュータのあらゆるデータにはアドレスというものが割り当てられて保存されます
コンピュータは、このアドレスを情報源にデータを探します

当然このアドレスをプログラマが指定することで、データにアクセスすることも可能です
C言語で悪名高いポインタなどが有名です

アドレスを指定するには、変数や関数(サブルーチン)、配列やハッシュのアドレスを得ます
このアドレスに対して遠隔から操作することで、これまでできなかった引数元の値を変更することができます
(C++のリファレンスと同じようなものです)

よくわからないという方は、変数の「別名」を作ると思ってください
アドレスを得るには、変数、配列、ハッシュ、サブルーチンの全てにおいて方法は同じで
通常のアクセスの前に\をつけることで、その変数のアドレスにアクセスできます

ただしリファレンスはアドレスを得るだけではなく、アドレスを展開することもできます
アドレスは人間にとって、意味不明な16進数の値です
これを展開することによって、本来このアドレスに格納されている内容を知ることができます

以下、変数、配列、ハッシュ、ルーチンのアドレスとその内容の取得方法です
複数の方法が考えられる場合はカンマで区切っています
種類アドレス取得内容を取得
スカラー\$ref$$ref , ${$ref}
配列\@ref@$ref , @{$ref}
配列要素\$ref[index]$$ref[index] , $ref->[index]
ハッシュ\%ref%$ref , %{$ref}
ハッシュ要素\$ref[index]$$ref[index] . $ref->[index]
サブルーチン\&ref&$ref , &{$ref}
全てを一度に暗記する必要はありません
アドレス取得には、とにかく最初に \ をつけて、内容を得るには宣言子(%や@)の後に $ をつけると覚えればよいでしょう

( C言語経験者は \ 記号はC言語で言うアドレス演算子 & だと思えばよいでしょう)

このリファレンスをつかって、サブルーチンから引数元の変数の値を変更させてみましょう
	$var = "今日はクリスマス、神様が生まれた日♪";
	print "$var\n";

	&ref(\$var);

	print "$var\n";

	sub ref {
		my($Po) = @_;
		$$Po = "今日はクリスマス、神様が召された日♪";
		}
サブルーチン&refの引数に渡しているのは変数$varのアドレスです
サブルーチン内で、このアドレスの内容に代入することで、変数$varの値が変わります
アドレスが同じである以上、これは当然のことですね



前のページへ戻る次のページへ