リファレンスの値を別の変数からいじりたい時の注意点

例えば、このようなコードをすっきる見せるために、

$self->{'foo'}->{'bar'} = 123;
$self->{'foo'}->{'baz'} = 456;
.
.
.

このようにエイリアスを持たせて書きたい場合、

my $data = $self->{'foo'};
$data->{'bar'} = 123;
$data->{'baz'} = 456;

$self->{'foo'} が undef の場合、参照している内容はリファレンスでは無いので、本来欲しい結果とは違うものになります。


上記の結果は、

$VAR1 = {};

こうなります。


意図した結果にするには、

my $data = $self->{'foo'} = {};
$data->{'bar'} = 123;
$data->{'baz'} = 456;

このように、リファレンスを代入してから操作する必要があります。


これで無事こうなります。

$VAR1 = {
    'foo' => {
        'bar' => 123,
        'baz' => 456,
    }
};