sub foo { open F, ... or die "-1\nerror opening file"; return $result; } my $string; eval { $string = foo(); }; if ( $@ ) { ( my $code, $string ) = split /\n/, $@; ... } #### sub foo { open F, ... or return( [ -1, "error opening file" ] ); return( [ 0, $result ] ); } my( $code, $string ) = foo(); #### sub foo { open F, ... or die [ -1, "error opening file" ]; return $result; } my $string; eval { $string = foo(); }; if ( $@ ) { ( my $code, $string ) = $@; ... }