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 ネストした配列リファレンス
カテゴリ:
Perl_retry
Perl