These were the questions asked in the OP --
What are your strategies for avoiding those 'doh' moments? ...are there things I could do now to reduce the number of silly mistakes I make?
-- not how to avoid object destructor confusion which is a solved issue. use strict and use warnings might be a bit trite but it is the best advice to a newbie who asks for newbie advice, not "use 4-arg substr instead of lvalue substr" or almost any of the rest of the PBP. Which for the most part would not be good advice but showing off.