in reply to "warn" is your best friend
Actually I find a good IDE, breakpoints and variable contents viewing a lot more powerful and much faster than any sort of print/warn/::diag/Carp/... based technique. Even the Perl command line debugger is vastly quicker for resolving issues than any print based technique (I used Perl's command line debugger for the first time in 3 years yesterday and was sufficiently up to speed with it in 10 minutes).
I use Carp for reporting bad states (unexpected parameters for example) and die for exception handling internally. Those often point to areas where a little debugging is required, but then it's set a breakpoint and inspect the state directly - even changing variable contents on the fly to explore issues further. For me with, any half decent development environment available, print based debugging stopped 30 years ago.