Perl::リファレンス
引き続きリャマ本とアルパカ本から
#!/usr/bin/perluse strict;
use warnings;use 5.010;
my @one = qw(one two three);
my @two = ("hoge", \@one);
[$one[0] => one $one[1] => two $one[2] => three]
この3つの情報が入ったアドレスを@twoに渡す
@twoの一つ目は"hoge"だからそのまま表示できる
my $youki = $two[0];
print "$youki\n";
[結果]
hoge
@twoの2つめはアドレスが格納されてる
my $youki2 = $two[1];
print "$youki2\n";
[結果]
ARRAY(0xメモリアドレス)
なぜか。格納されているのはデータが置いてあるアドレス番地を指す
ポインタの情報であって、データそのものが入っているわけではないから。
ということで、持ち合わせているアドレス情報の参照先を表示させてみる。
@@hoge 配列全体
$$hoge[0] 配列の第1要素を参照
print "@$youki2\n";
print "$$youki2[0]\n";
print "$$youki2[1]\n";
print "$$youki2[2]\n";
[結果]
print "@$youki2\n";
- > [one two three]
print "$$youki2[0]\n";
- > [one]
print "$$youki2[1]\n";
- > [two]
print "$$youki2[2]\n";
- > [three]
もう1個。
my $foo = "hello";
my $bar = \$foo;
my $baz = \$bar;
pointer -> pointer $を付け足していくことでアドレスを指定し続ける
print "$foo\n";
print "$$bar\n";
print "$$$baz\n";
結果は全部「hello」。
記号ひとつで意味がだいぶ変わるから
Perl使いこなしてる本当に尊敬する。