in reply to DESTROY Function call
No. The DESTROY function will be called immediately after the last reference to the object goes out of scope.
This is fairly similar to what C++ seemingly does, but only in the case where no references escape that scope.
Update: Also, the "SEE ALSO" section of Scope::Guard mentions many other modules that implement the same approach.