For debugging purposes, I was very happy to learn the following:
$SIG{__WARN__} = sub { print $_[0]; $DB::single = 1 };
I was annoyed to notice that warning messages did not appear as I was running code in the debugger. That might be fixable; I have never looked into it. This statement is now included in just about any program I write of any length. Not only does it give me the message but stops the debugger at the point of warning.
I comment out the line when not running in the debugger because it generates a warning message. What irony.