Are you sure that your DESTROY method is getting called when you expect?
See perlobj for details, but it has this to say -- which may be relevant to your issue.
The order in which objects are destroyed during the global destruction
+ before the program exits is unpredictable. This means that any objec
+ts contained by your object may already have been destroyed. You shou
+ld check that a contained object is defined before calling a method o
+n it.
I've never had much luck trying to use perl destructors, they seem to be far too unpredictable but YMMV ;)