PerlさんPerlくん
[perl]リファレンスとは
最終更新:
atwikimyj
-
view
普通の変数とは違い、メモリのアドレスの値を
やり取りして効率のよいデータの参照を行うこと。
$a = $hoge;
だと$hogeの分だけメモリを使う。そのため$hogeが
巨大だとその分無駄にメモリを使用することになる。
そこで、$hogeが保存されているアドレスの値を使って
効率的に値を参照させる。
やり取りして効率のよいデータの参照を行うこと。
$a = $hoge;
だと$hogeの分だけメモリを使う。そのため$hogeが
巨大だとその分無駄にメモリを使用することになる。
そこで、$hogeが保存されているアドレスの値を使って
効率的に値を参照させる。
$ref = $hogeのメモリのアドレス;
ならば、$hogeがどんなに大きな文字列でもそのアドレスの値の
分しかメモリを消費しない。つまり処理速度も速くなる。
ならば、$hogeがどんなに大きな文字列でもそのアドレスの値の
分しかメモリを消費しない。つまり処理速度も速くなる。
スカラーではあんまり使い道がないかもしれないが、
ハッシュなどでは威力を発揮する。
ハッシュなどでは威力を発揮する。
@hogearray = ( $hoge1, $hoge2 , $hoge3 );
と代入するととっても無駄なのでリファレンスを使うと
いいかもしれません。
@hogearray = ( \$hoge1, \$hoge2 , \$hoge3 );
と代入するととっても無駄なのでリファレンスを使うと
いいかもしれません。
@hogearray = ( \$hoge1, \$hoge2 , \$hoge3 );
※あとからリファレンスを実際の値に戻さないといけないけど。
リファレンスを変数に代入する方法
$ref_hoge = \@hoge;
ちなみに、リファレンスを画面に表示させると
print $ref_hoge
print $ref_hoge
HASH(X898303)
のような表示になる。上記はハッシュリファレンスの場合。
普通のスカラー変数の場合は
普通のスカラー変数の場合は
SCHOLAR(X898303)
などとなる。値取れなくて困ったら
printで値をとりましょう。
printで値をとりましょう。
リファレンスから値を変数に代入する方法
リファレンスの値の取得方法は
スカラー、オブジェクトの場合
$hoge = $$ref_hoge
配列の場合は
@hoge = @$ref_hoge
ハッシュの場合は
%hoge = %$ref_hoge
スカラー、オブジェクトの場合
$hoge = $$ref_hoge
配列の場合は
@hoge = @$ref_hoge
ハッシュの場合は
%hoge = %$ref_hoge
リズムファクトリー
http://www.rfs.jp/sb/perl/02/10.html
http://www.rfs.jp/sb/perl/02/10.html