これは私の同僚が抱えている厄介な問題です。そして、私も原因を解明することができませんでした。
短いバージョンは、彼が書いたクラスで、DESTROY
デストラクタ/メソッドが定義されてDESTROY
おり、オブジェクトが破棄されたときに呼び出されません。オブジェクトがスコープ外になると思った時点では呼び出されません。そして、どこかにぶら下がっている参照があるかもしれないと考えましたが、スクリプトの終了時にも呼び出されていません。クラスとスクリプトにデバッグprint
ステートメントを散らかし、ブロック内で明示的に呼び出してEND
、間違った名前空間に配置されていないことを確認しました。(私たちはしませんでした。明示的な呼び出しはprint
、期待どおりにすべてのステートメントをトリガーしました。)
だから私はこれに戸惑い、彼と同じように答えに興味を持っています。どのような状況がこの動作につながる可能性がありますか?問題のスクリプトは正常に終了しています-呼び出しPOSIX::_exit
などはありません。この中の唯一の「変数」は、クラスがClass::MethodMaker
いくつかのアクセサーとコンストラクターを定義するために使用していることです。ただし、Class::MethodMaker
ドキュメントには、クラスDESTROY
メソッドとの相互作用(またはオーバーライド)についての参照はありません。