Perl再入門 | アルパカ本に学ぶリファレンス入門5 - ネストした配列リファレンス

配列のリファレンスをネスト

リファレンスはネストさせることができます。
階層構造を持ったデータを作るときに便利です。

use strict;


my @array1 = (1, 2, 3);

my @array2 = (2, 4, 6);


my @all = (\@array1, \@array2);

my $ref = \@all;


# 値を取り出す

print "${${$ref}[1]}[2]\n";  # 出力: 6

print "$ref->[1]->[2]\n";    # 出力: 6

print "$ref->[1][2]\n";      # 出力: 6


# 配列を取り出す

print "@{${$ref}[1]}\n";  # 出力: 2 4 6

print "@{$ref->[1]}\n";   # 出力: 2 4 6
まず、@array1と@array2のリファレンスを作って@allに格納します。
次に、@allのリファレンスを作って$refに格納しています。

すると、$refは「配列のリファレンスを格納した配列」のリファレンス ということになります。

デリファレンスの省略記法

2つの法則があります。
  • ${なんちゃら}[1] と書ける全てのコードは、なんちゃら->[1] と書ける。
  • 添え字的なもの間に挟まれている矢印、つまり[1]->[2]とか{'foo'}->{'bar'}とかの矢印は省略できる。
${$ref}[1]  =>  $ref->[1]
$ref->[1]->[2]  => $ref->[1][2]
Perl再入門 | アルパカ本に学ぶリファレンス入門5  ネストした配列リファレンス
カテゴリ: