Ok, I've tracked down the problem to Regexp::Common. I've changed places in the code that used to have:
use Regexp::Common;
to instead
use Regexp::Common qw(number);
Which should actually reduce memory usage as well. And the reason that my
Carp/$SIG{__WARN__} trick didn't work was because this was a place in the test suite that generated code and executed it in another process (with a fresh new perl). Thanks for all the suggestions.
-- More people are killed every year by pigs than by sharks, which shows you how good we are at evaluating risk. -- Bruce Schneier