eval { use warnings 'recursion'; local $SIG{__WARN__} = sub { die "Too deep" if $_[0] =~ m#^Deep recursion# }; # your code }; # check $@ if you want to here