http://www.perlmonks.org?node_id=208433


in reply to Silencing warnings when testing

I have very similar logic in a number of my test scripts. I use an eval block and check that the message in $@ matches what I was expecting. That won't work directly for you since your code uses 'carp' where mine uses 'croak'.

If one of your methods is passed an invalid argument, is there any point carrying on? Rather than carp and return 0, why not just croak?

Coming back to your original question though, you could capture warning messages like this:

our $last_warning = ''; $SIG{__WARN__} = sub { $last_warning = shift; } ... code that generates warning ... ... code that checks contents of $last_warning ...