よく使うのによく忘れるのでリファレンスです。とても自分用です(汗。
通常の配列
@x = (10, 20, 30);
$a = $x[0] + $x[2];
無名配列
$x = [10, 20, 30];
$a = $x->[0] + $x->[2];
通常のハッシュ
%h = ('name' => 'Taro', 'age' => 20, 'height' => 175);
$h{'height'} += 1;
無名のハッシュ
$h = {'name' => 'Taro', 'age' => 20, 'height' => 175};
$h->{'height'} += 1;
通常の方は、同じ変数名を使うと上書きされます。無名~は、変数名っぽいものは仮の名で、毎回メモリに領域を確保されます。
誤例:
@x = (10, 20, 30);きっとやりたかった事は・・・
$data1 = \@x; #xへのリファレンス
@x = (20, 40, 60); #配列xを上書きしています!
$data2 = \@x; #xへのリファレンスprint $data1->[0]; #配列xの[0]番目は・・・
20
$x = [10, 20, 30];
$data1 = $x;
$x = [20, 40, 60]; #無名配列は都度、メモリに領域を確保
$data2 = $x;print $data1->[0];
10
Cの構造体っぽいことをするときに便利です。
%human = (
'Taro' => { 'age' => 20, 'height' => 175 },
'Jiro' => { 'age' => 18, 'height' => 167 },
'Hana' => { 'age' => 15, 'height' => 150 }
);print $human{Jiro}->{age};