無名ハッシュコピーではまる
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)
普通に構造自体がコピーされるディープコピーになるかと思ってたけど、そうか、メモリのアドレスがコピーされるのか。