デリファレンス

Perlを読んでいると、しばしばこういう記述がでてくる。

@$hogehoge

@は配列、$は変数を表していたはずである。
@$というのは、どういうことなのだろうか。

上は実は、

@{$hogehoge}

を省略した書き方なのらしい。配列のリファレンスが入った$hogehogeから、実体の配列にアクセスするためのデリファレンスの記法として

@{$hogehoge}

という書き方があるのだが、この{}は省略できる。

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

use Data::Dumper;
print Dumper $ref_array;
print Dumper @$ref_array;

こうな書いてみよう。$ref_arrayは配列のリファレンスが、@$ref_arrayからは配列の実態が入っている。

$VAR1 = [
          1,
          2,
          3,
          4,
          5,
          6
        ];
$VAR1 = 1;
$VAR2 = 2;
$VAR3 = 3;
$VAR4 = 4;
$VAR5 = 5;
$VAR6 = 6;

[]でくくればその配列のリファレンスが取れるので、こうでもいい。

use Data::Dumper;
my $ref_array2 = [1, 2, 3, 4];
print Dumper $ref_array2;
print Dumper @$ref_array2;