デリファレンス
デリファレンスとはリファレンスを作成するのと反対の操作で、リファレンスから実体を取り出すことができます。
配列のリファレンスをデリファレンス
配列のリファレンスをデリファレンスするには「@{}」を使用します。
my @array = @{$array_ref};
新しい配列が作られるわけではなく、実体が取り出されているということを意識してください。
「@{}」の内側が単純な変数の場合は「{}」を省略することができます。
my @array = @$array_ref;
配列のリファレンスをデリファレンスするサンプルプログラムです。
# 配列のリファレンス my $nums_ref = [1, 2, 3]; # デリファレンス my @nums = @$nums_ref;
Perlの配列操作を行う標準関数は、配列のリファレンスではなく、配列を渡す必要があります。このような場合は、デリファレンスして、関数に渡してください。
my $nums = [1, 2, 3]; my $num = shift @$nums;
ハッシュのリファレンスをデリファレンス
ハッシュのリファレンスのデリファレンスを行うには「%{}」を使用します。
my %hash = %{$hash_ref};
新しいハッシュが作られるわけではなく、実体が取り出されているということを意識してください。
「%{}」の内側が単純な変数の場合は「{}」を省略することができます。
my %hash = %$hash_ref;
ハッシュのリファレンスをデリファレンスするサンプルプログラムです。
# ハッシュのリファレンス my $score_ref = {math => 19, english => 89}; # デリファレンス my %score = %$score_ref;
Perlのハッシュ操作を行う標準関数は、ハッシュのリファレンスではなく、ハッシュを渡す必要があります。このような場合は、デリファレンスして、関数に渡してください。
my $score = {math => 89, english => 45}; my @keys = keys %$score;
スカラ変数のリファレンスをデリファレンス
スカラ変数のリファレンスのデリファレンスを行うには「${}」を使用します。
my $scalar = ${$scalar_ref};
「${}」の内側が単純な変数の場合は「{}」を省略することができます。
my $scalar = $$scalar_ref;
スカラのリファレンスをデリファレンスするサンプルプログラムです。
# スカラのリファレンス my $string1 = "Hello"; my $string_ref = \$string; # デリファレンス my $string2 = $$string_ref;
他のリファレンスのデリファレンスはできるの?
サブルーチンのリファレンスと正規表現のリファレンスは、デリファレンスすることができません。