« 九份 | メイン | 話題の『Pogoplug Mobile』をLinux box化 »

Perl - 無名配列と無名ハッシュ

よく使うのによく忘れるのでリファレンスです。とても自分用です(汗。

通常の配列

@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};