$re = '[\w-]'; my @warnings; { local $SIG{__WARN__} = sub { push @warnings, shift }; eval {'' =~ /$re/ }; } if($@) { print "error: $@\n"; } else { foreach my $warning (@warnings) { print "Got a warning: $warning"; } }