はてなCTOの日記を参考にして、初めて Scalar::Utils::weaken を使ってみました。とあるスクリプトを SpeedyCGI 使ってプロセス永続化したんですけど、これが循環参照バリバリ。1サイクル終了時に相互参照をクリアするメソッド作ったんですが、どっか見落としがあったらしくて、どうしてもメモリから解放されないオブジェクトができてしまってた。
ところが Scalar::Util 使って循環参照になってるとおぼしき変数を全部 weaken してみたんだけど、DESTORY されるかどうか見てみると、1サイクル終わっても1つだけ解放されないオブジェクトが残ってる。どうしちゃるかねとゆうわけで、今度は Devel::Cycle を CPAN から取って来てインストール。ところがこれ、参照元側のオブジェクトを1個指定して循環参照を検索するもんなんですね。どれが参照元なのかわからないので、やっぱり見つからないー。
なんか入れるとそれを参照してる参照元を探してくれるモジュールって何か無いですかね?
Postedit:
思惑通り 小飼さんきたー。ありがとうございます。
うちの perl は Debian Etch に入ってる -DDEBUGGING 無しのやつだったので、さっそく perl-debug パッケージを追加で入れて、Devel::Leak も入れました。今から改めてデバッグ。

