%main::err = ( "errno" => 1, "message" => "I'm dead I am", ); #### #!/usr/bin/perl use Data::Dumper; die Data::Dumper->Dump([ { # die with a hash value "errno" => 1, "message" => "I'm dead I am", } ], [ '*err' ]) . "\n"; 1; #### # This is our error container my %err; # Rather than "require", we use "do". This stops # the compilation warning from appearing. eval { do "some_code.pl"; die $@ if $@; }; if ($@) { eval $@; # evaluate our "error" string print $err{errno}; # print our errno print $err{message}; # print our message }