リファレンスとデリファレンスを使用して、配列の要素をprintする

◎本日2つめのお題
配列を定義し、その配列のリファレンスをつかってある要素の値をデリファレンスして取得する。

#! usr/bin/perl

use strict;
use warnings;

my @array=(0,1,2,3,4,5,6,7,8,9);
my $ref_array=\@array;

print "\@array=@array\n";
print "\$ref_array=$ref_array\n";

#@arrayの4番目の数値(添字は3の値)を2通りのやり方でprintする。

print "\@array[3]=$array[3]\n";
print "\$\$ref_array[3]=$$ref_array[3]\n";

◎ポイント
■変数の一番最初に$を付けることでリファレンスになる。
例),@arrayは、$@array。%hashは、$%hash。$scalarは、$$scalar。
■$$ref_array[3]は、${$ref_array[3]}と同義ではない。
$$ref_array[3]は、ref_arrayを境にref_arrayの左側を内側から読み解き、次にref_arrayの右側を内側から読み解く。
→(1)ref_arrayとかっていう名前のスカラーだか配列だかハッシュだかのことだな。
→(2)$がついてる($$のうちの右側の$)から、ref_arrayはスカラーだな。
→(3)さらに$がついてるから、$ref_arrayをデリファレンスしてるんだな。
→(4)[3]だから、ref_arrayっていうのは実は配列なんだな。
→(5)ref_arrayをデリファレンスしたときの(ref_arrayをデリファレンスすると配列になる)、4番目の要素の値を返してあげればいいのね。


${$ref_array[3]}は、最初に{}の中を読み解き、{}の左側を内側から読み解き、次に{}の右側を内側から読み解く。
→(1)配列ref_arrayの4番目の要素の値のことね。
→(2){}の左側に$がついてるから、(1)をデリファレンスした値(スカラー)が欲しいのね。

#! /usr/bin/perl

use strict;
use warnings;

my ($a,$b,$c,$d)=('hello','sorry','excuse','bye!');
my @array=(\$a,\$b,\$c,\$d);

print "\@array=@array\n";
print "\${\$array[2]}=${$array[2]}\n";

my $ref_array=\@array;

print "\$ref_array=$ref_array\n";

print "\$\$ref_array[2]=$$ref_array[2]\n";
print "\${\$\$ref_array[2]}=${$$ref_array[2]}\n";