The DESTROY method is special because perl calls it when it realizes it can garbage-collect the object in question. If you would like to manually release the object from memory (by the way, do you have a good reason for this?), you should not call DESTOY directly, which, as you noted, will simply cause it to be called twice. Instead, you delete the last reference to the object, eg:
in reply to Writing a REAL destructor
Immediately after the undef(), the object will be freed (because Perl uses a ref-counting GC) and DESTROY called.
my $me = new Person;
ps. My condolences regarding Andy.
s aamecha.s a..a\u$&owag.print