这是我的一个同事遇到的一个令人困惑的问题。而且我也无法找出原因。
简短的版本是,在他编写的一个DESTROY
定义了析构函数/方法的类中,DESTROY
当对象被销毁时不会被调用。它不会在我们认为对象超出范围的时候被调用。虽然我们认为在某处可能存在对它的悬空引用,但它也不会在脚本退出时被调用。我们在类和脚本中乱扔了调试print
语句,甚至在一个END
块中显式调用它只是为了验证我们没有以某种方式将它放在错误的命名空间中。(我们没有。显式调用print
按预期触发了所有语句。)
所以我对此感到困惑,并且和他一样对答案感兴趣。什么情况下可能会导致这种行为?有问题的脚本正在干净地退出 - 没有调用POSIX::_exit
或类似的东西。唯一的“变量”是该类Class::MethodMaker
用于定义一些访问器和构造函数。但是,文档中没有提及Class::MethodMaker
与(或覆盖)类DESTROY
方法进行交互。