in reply to using warn instead or print STDERR?

I tend to use warn (and its relatives from Carp) in production code - debugging by printing to STDERR since, as has been pointed out elsewhere on this thread, warnings are trappable - indeed, my test harnesses (using Test::More), attempt to to verify that the code is/isn't doing something unexpected by catching warnings using...
my $WARN; local $SIG{__WARN__} = sub { $WARN = "@_" }; . . my $WARN = ''; some_op(); like($WARN, '/^$/', 'some_op() - no warnings');

Update:

Added example call - for clarity.

A user level that continues to overstate my experience :-))