if ( "ok" eq eval { process_upload_as_excel($upload); "ok" } ) { # Do stuff, report success. } elsif ( $@ ) { my $first_err = $@; if ( "ok" eq eval { process_upload_as_cvs($upload); "ok" } ) { # Do stuff, report success. } else { die "Couldn't process as Excel or CVS..."; # Include $first_err and (new one) $@. Or don't. # I'm a code comment, not a cop. } } else { die "Unknown failure!"; }