in reply to Is assigning undef required for DESTROY to run?

It may be that your vendor library isn't too clean with its memory management. The order of object creation and object destruction differs whether you undef the first object manually or wait until it gets overwritten:

sub new{ print 'new'; bless{} }; sub DESTROY{ print'DESTROY' }; $x=new; $x=new; __END__ new new DESTROY DESTROY

and with explicit undef:

sub new{ print'new'; bless{} }; sub DESTROY{print'DESTROY'}; $x=new; undef $x; $x=new __END__ new DESTROY new DESTROY

at least under Perl 5.10, but I don't see how it could be different under any Perl ≤ 5 due to the fact that the assignment will always happen after the object construction, and only after the assignment, the memory allocated for the first instance can be released.

Update: Doh - had I read your node to the end, I'd have seen that you came to that conclusion already...