リファレンスの管理でラクしようと思って、弱いリファレンスを使ってみたのですが
自己参照を含むリファレンスをweakenしても思うように動作してくれません。
use Scalar::Util qw(weaken);
my $outer;
{
  my $inner = {id => 'inner'};
  $inner->{self} = $inner;
  $outer = $inner;
  weaken $outer;
}
print Data::Dumper->Dump([$outer]);
の出力は
$VAR1 = {'self' => $VAR1, 'id' => 'inner'};
と、$innerが解放されずに自己参照が生きています。
まだ実験機能らしいしこういうものなのでしょうか?
ちなみに5行目の $inner->{self} = $inner; をコメントアウトすると
ちゃんと $innerのスコープ外で $outerはundefになります。
な、なんで??