sub warns (&) { my $sub = shift; my @warns; { local $SIG{__WARN__} = sub { push @warns, shift }; $sub->() } return wantarray ? @warns : scalar @warns; } print "<$_>\n" for warns { warn "Hello"; warn "World" } __END__