読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

無名ハッシュコピーではまる

Perlを勉強して1年くらい経ったけど、初めて知ったのでメモ。
無名ハッシュをスカラに入れて、そのスカラをコピーして片方の値を変更すると、もう一方も変わってしまう。

#!/usr/local/bin/perl
use strict;
use warnings;
use 5.010;

my $aaa = { a => 1 };
say $aaa->{a}; #=> 1

my $bbb = $aaa;
$bbb->{a} = 2;

say $aaa->{a}; #=> 2

__END__

リファレンス自体を出力してみると、全く同じ。

say $aaa; #=> HASH(0x8784c20)
say $bbb; #=> HASH(0x8784c20)

普通に構造自体がコピーされるディープコピーになるかと思ってたけど、そうか、メモリのアドレスがコピーされるのか。