bikeNomad's answer is correct, with an addendum.
Using signals is not always straightforward. Signals are handled asynchronously and can interrupt each other. If you are, for example, redirecting those messages to a file, one signal might come in while the previous one is still processing, and stop it from going any further. You could loose some warnings that way, especially if they are being emitted from a tight loop and the handler is slow to execute.
In this case, it may be easier to redirect STDERR, which can be done with something like:
my $old_stderr = STDERR;
open STDERR, ">mylogfile.log";
|