# the way you want if( magical_how_many_open() < $what_i_need ) { do_wait_some_how(); } # the way you're being pushed eval { open( $fh, "whatever" ); }; if( $@ ) { if( $@ eq "Too many open files" ) { do_wait_some_how(); } else { degrade_gracefully(); } }