in reply to when is destroy function called

As perldoc perlobj says,
When the last reference to an object goes away, the object is destroyed. If you only have one reference to an object stored in a lexical scalar, the object is destroyed when that scalar goes out of scope.
So you can safely copy the file after the object was undefined.
Sorry if my advice was wrong.